1

我有看起来像这样的方法:

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

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

4

2 回答 2

1

您始终可以使用模拟框架对其进行测试。使用 ie 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)))
于 2013-02-05T03:55:07.663 回答
0

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

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

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

于 2013-02-03T08:30:32.400 回答