FakeItEasy:模拟 MessageBox
FakeItEasy: Mocking MessageBox
我需要避免(模拟)使用 FakeItEasy 框架对显示消息框的代码行进行单元测试。
代码在这里,
public class XYZ
{
public static int nValue = 0;
public void AddInetegers(int i)
{
int j = i * 100;
int k = j * 30 / 100;
MessageBox.Show("Value Here {0}", k.ToString());
nValue = k;
}
}
MessageBox.Show
是静态成员,cannot be faked by FakeItEasy。在这些情况下,访问 non-fakeable 服务的代码通常被隔离并包装在一个接口中。
以下是我的做法:
interface IAlerter
{
void Alert(string text, string caption);
}
public class XYZ
{
public static int nValue = 0;
private readonly IAlerter _alerter;
public XYZ(IAlerter alerter)
{
_alerter = alerter;
}
public void AddInetegers(int i)
{
int j = i * 100;
int k = j * 30 / 100;
_alerter.Show("Value Here {0}", k.ToString());
nValue = k;
}
}
[TestMethod]
public void Test_Using_FakeItEasy()
{
var alerter = A.Fake<IAlerter>();
// No need to configure alerter.Alert(), since it doesn't return a value
var xyz = new XYZ(alerter);
xyz.AddInetegers(3);
Assert.AreEqual(90, XYZ.nValue);
}
我需要避免(模拟)使用 FakeItEasy 框架对显示消息框的代码行进行单元测试。
代码在这里,
public class XYZ
{
public static int nValue = 0;
public void AddInetegers(int i)
{
int j = i * 100;
int k = j * 30 / 100;
MessageBox.Show("Value Here {0}", k.ToString());
nValue = k;
}
}
MessageBox.Show
是静态成员,cannot be faked by FakeItEasy。在这些情况下,访问 non-fakeable 服务的代码通常被隔离并包装在一个接口中。
以下是我的做法:
interface IAlerter
{
void Alert(string text, string caption);
}
public class XYZ
{
public static int nValue = 0;
private readonly IAlerter _alerter;
public XYZ(IAlerter alerter)
{
_alerter = alerter;
}
public void AddInetegers(int i)
{
int j = i * 100;
int k = j * 30 / 100;
_alerter.Show("Value Here {0}", k.ToString());
nValue = k;
}
}
[TestMethod]
public void Test_Using_FakeItEasy()
{
var alerter = A.Fake<IAlerter>();
// No need to configure alerter.Alert(), since it doesn't return a value
var xyz = new XYZ(alerter);
xyz.AddInetegers(3);
Assert.AreEqual(90, XYZ.nValue);
}