我需要避免使用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;
}
}发布于 2018-04-06 09:55:03
MessageBox.Show是一个静态成员,而不能被FakeItEasy伪造是一个静态成员。在这些情况下,通常访问非伪造服务的代码被隔离并包装在一个接口中。
我会这样做:
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);
}https://stackoverflow.com/questions/49671838
复制相似问题