我的方法如下:
public A Method(int a, int b){
return new A().AMethod(a, b);
}
现在我通过测试对它进行测试,我得到的对象在AMethod操作'a'和'b'后有预期的值,但对我来说这看起来像集成测试,我正在测试第一种方法和AMethod里面。我想知道如何在创建新对象A之后测试我的方法被隔离以知道'a'和'b'被传递给AMethod,并且它们按顺序传递而不是例如反转。
答案 0 :(得分:1)
您始终可以使用模拟框架来测试它。使用即MOQ框架创建模拟。比你可以测试参数。它会是这样的
这不是具有一些错误的确切代码,但可以给你一个想法。
var mocmethod = new Mock<IMethodA>(pass your parameters here)
mockmethod.setup=(x=>x.a(It.Isany<int>)......).Returns(A),
mockmethod.Verify(r=>r.a(It.Is<int>(r=>r.b == "Something"), It.Is<int>(i=>i > 17)))
答案 1 :(得分:0)
我可以在这里建议2个解决方案:
介绍A
工厂相关性。
创建新A
实例的职责可以委派给thir-party接口。例如。它可能是IAFactory
。 Method()
应使用此工厂创建新的A
实例,而不是直接创建A
在这种情况下,您可以存根IAFactory
:它应该返回A
模拟。您可以使用适当的参数测试AMethod
。
断言AMethod()
执行结果。
例如:如果AMethod()
初始化PropA
实例的2个属性(PropB
和A
),则测试应检查这些属性是否包含有效值。
在那种情况下,测试不考虑实际初始化本地的方式。它只是检查最终结果是否符合预期。