这似乎是一个很容易解决的问题,但我似乎无法找到影响我搜索的关键字。
我试图通过模拟这个方法调用中的所有对象来进行单元测试。除了这个之外,我能够为自己的所有创作做到这一点:
public void MyFunc(MyVarClass myVar)
{
Image picture;
...
picture = Image.FromStream(new MemoryStream(myVar.ImageStream));
...
}
FromStream是来自Image类的静态调用(c#的一部分)。那么我怎么能重构我的代码来模拟这个,因为我真的不想为单元测试提供图像流。
答案 0 :(得分:3)
您可以创建IImageLoader接口。 “普通”实现只调用Image.FromStream,而单元测试版本可以做任何你需要它做的事情。
答案 1 :(得分:2)
Moq和大多数其他模拟框架不支持模拟静态方法。但是,TypeMock确实支持模拟静态方法,如果您愿意购买,可能会对您感兴趣。否则,你将不得不重构,以便可以模拟界面......
答案 2 :(得分:1)
您可以将静态函数包装到Func类型属性中,该属性可以通过模拟或存根的单元测试来设置。
public class MyClass
{
..
public Func<Image, MemoryStream> ImageFromStream =
(stream) => Image.FromStream(stream);
public void MyFunc(MyVarClass myVar)
{
...
picture = ImageFromStream(new MemoryStream(myVar.ImageStream));
...
}
..
}
答案 3 :(得分:1)