NUnit如何测试传递给对象构造函数的参数

时间:2013-02-02 23:29:00

标签: c# unit-testing nunit moq

我的方法如下:

public A Method(int a, int b){
    return new A().AMethod(a, b);
}

现在我通过测试对它进行测试,我得到的对象在AMethod操作'a'和'b'后有预期的值,但对我来说这看起来像集成测试,我正在测试第一种方法和AMethod里面。我想知道如何在创建新对象A之后测试我的方法被隔离以知道'a'和'b'被传递给AMethod,并且它们按顺序传递而不是例如反转。

2 个答案:

答案 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个解决方案:

  1. 介绍A工厂相关性。
    创建新A实例的职责可以委派给thir-party接口。例如。它可能是IAFactoryMethod()应使用此工厂创建新的A实例,而不是直接创建A 在这种情况下,您可以存根IAFactory:它应该返回A模拟。您可以使用适当的参数测试AMethod

  2. 断言AMethod()执行结果。
    例如:如果AMethod()初始化PropA实例的2个属性(PropBA),则测试应检查这些属性是否包含有效值。
    在那种情况下,测试不考虑实际初始化本地的方式。它只是检查最终结果是否符合预期。