使用Moq模拟System.Drawing.Image

Chr*_*eek 1 c# unit-testing moq mocking

我如何用Moq嘲笑图像?

它没有构造函数(总是从工厂方法生成).

基本上我想做这样的事......

var image = new Mock<Image>();
image.Setup(i=>i.Save(someStream,ImageFormat.Jpeg);
var testableObject = new ObjectUnderTest(image.Object);

testableObject.MethodBeingTested();

image.VerifyAll();
Run Code Online (Sandbox Code Playgroud)

joh*_*y g 5

昨天回答了一个类似的问题,你可能希望看看这个线程嘲笑一个静态的Singleton.

如果绝对有必要模仿这种行为,那么被禁止的方法是生成一个暴露所需方法的接口,用一个具体的类[有效地包装Image类]为prod实现它,并模拟接口进行测试.

它确实听起来有点过分,但是如果你需要Mock \验证你的可测试类和Image之间的交互,那就是这样做的方法.或者,您可以将可测试类传递给Image的实际实例,然后将此实例与预期输出进行比较[标准单元测试方法]

  • 我认为测试时要问的一个重要问题是“我到底在测试什么?”。在不了解您的问题的更多信息的情况下,我会冒险猜测您正在测试某种图像处理。严格来说,这种操作应该独立于图像进行测试,例如字节流测试或其他测试。测试“系统”类通常被认为是大材小用——就像测试 Web 服务一样,我也见过很多这样的情况。人们可能会认为 CLR 是“安全的”。您希望将业务逻辑[即您的图像发生的任何情况]与系统类[即图像]分开。 (2认同)