Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NUnit如何测试传递给对象构造函数的参数_C#_Unit Testing_Nunit_Moq - Fatal编程技术网

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
    也会返回一个新实例吗?我这样问是因为这意味着你正在创建一个实例,调用一个创建另一个实例的方法,该方法调用该对象的一个实例方法来创建另一个实例并返回它。。