C# NUnit如何测试传递给对象构造函数的参数
我有这样的方法:C# NUnit如何测试传递给对象构造函数的参数,c#,unit-testing,nunit,moq,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,并按照该顺序传递,例如,不反向传递。我可以在这里建议两种解决方案: 引入工厂依赖关系。 创
public A Method(int a, int b){
return new A().AMethod(a, b);
}
现在我正在通过测试来测试它,我得到的对象在为AMethod操作“a”和“b”后具有预期值,但对我来说,这看起来像是一个集成测试,我正在测试第一个方法和AMethod内部。我想知道如何测试我的方法,在创建一个新对象a后,将“a”和“b”传递给AMethod,并按照该顺序传递,例如,不反向传递。我可以在这里建议两种解决方案:
工厂依赖关系。
创建新的
A
实例的责任可以委托给第三方接口。例如,它可能是IAFactory
Method()
应使用此工厂创建新的A
实例,而不是直接创建A
。在这种情况下,您可以存根
IAFactory
:它应该返回A
mock。您可以使用适当的参数测试调用AMethod
AMethod()
执行的结果。例如:如果
AMethod()
初始化A
实例的两个属性(PropA
和PropB
),则测试应检查这些属性是否包含有效值。在这种情况下,测试并不考虑属性实际上是如何初始化的。它只是检查最终结果是否符合预期
我可以在此提出两种解决方案:
工厂依赖关系。
创建新的
A
实例的责任可以委托给第三方接口。例如,它可能是IAFactory
Method()
应使用此工厂创建新的A
实例,而不是直接创建A
。在这种情况下,您可以存根
IAFactory
:它应该返回A
mock。您可以使用适当的参数测试调用AMethod
AMethod()
执行的结果。例如:如果
AMethod()
初始化A
实例的两个属性(PropA
和PropB
),则测试应检查这些属性是否包含有效值。在这种情况下,测试并不考虑属性实际上是如何初始化的。它只是检查最终结果是否符合预期
您始终可以使用模拟框架来测试它。使用MOQ框架创建mock。然后您可以测试参数。应该是这样的 这不是确切的代码,它有一些错误,但可以给你一个想法
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)))
var mocmethod=new Mock(在此处传递参数)
mockmethod.setup=(x=>x.a(It.Isany)…)。返回(a),
验证(r=>r.a(It.Is(r=>r.b==“某物”),It.Is(i=>i>17)))
您始终可以使用模拟框架来测试它。使用MOQ框架创建mock。然后您可以测试参数。应该是这样的
这不是确切的代码,它有一些错误,但可以给你一个想法
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)))
var mocmethod=new Mock(在此处传递参数)
mockmethod.setup=(x=>x.a(It.Isany)…)。返回(a),
验证(r=>r.a(It.Is(r=>r.b==“某物”),It.Is(i=>i>17)))
为什么实例方法返回新实例实例实例方法的值?a是DTO,a、b是下层的项。AMethod使用A和b的值设置一个属性。为什么它要实例化一个新的A
?它不能只调用AMethod
?因为我们想要检索一个新对象a,其中包含来自a和b的数据。AMethod
也会返回一个新实例吗?我这样问是因为这意味着你正在创建一个实例,调用一个创建另一个实例的方法,而该方法调用该对象的一个实例方法来创建另一个实例并返回它。为什么你的实例方法返回一个新实例的实例方法的值?a是DTO,a,b是下层的项。AMethod使用A和b的值设置一个属性。为什么它要实例化一个新的A
?它不能只调用AMethod
?因为我们想要检索一个新对象a,其中包含来自a和b的数据。AMethod
也会返回一个新实例吗?我这样问是因为这意味着你正在创建一个实例,调用一个创建另一个实例的方法,该方法调用该对象的一个实例方法来创建另一个实例并返回它。。