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

本文关键字:对象 构造器 参数 何测试 测试 NUnit | 更新日期: 2023-09-27 17:57:21

我有如下所示的方法:

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

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

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

您可以随时使用模拟框架来测试它。使用最小起订量框架创建模拟。然后您可以测试参数。会是这样的

这不是确切的代码,它有一些错误,但可以给你一个想法。

 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)))

我可以在这里提出 2 个解决方案:

  1. 引入A工厂依赖项。
    创建新A实例的责任可以委托给第三方接口。例如,它可以是IAFactory. Method()应使用此工厂创建新的A实例,而不是直接创建A
    在这种情况下,您可以存根IAFactory:它应该返回A模拟。您可以测试是否使用适当的参数调用AMethod

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