C# 测试对象是否使用正确的参数值实例化
我正在用Moq和Nunit对C#代码进行单元测试,我想测试下面的简化方法。就单元测试而言,我认为我不应该检查foo值,因为FooClass可能会发生更改,并在将来破坏我的测试。因此,我至少可以验证所有内容都得到了正确的初始化和调用,也就是说,someContainer得到了正确的值,FooClass得到了someContainer,而不是其他MyContainer实例。我该怎么做?这种(单元)测试方法正确吗C# 测试对象是否使用正确的参数值实例化,c#,unit-testing,moq,C#,Unit Testing,Moq,我正在用Moq和Nunit对C#代码进行单元测试,我想测试下面的简化方法。就单元测试而言,我认为我不应该检查foo值,因为FooClass可能会发生更改,并在将来破坏我的测试。因此,我至少可以验证所有内容都得到了正确的初始化和调用,也就是说,someContainer得到了正确的值,FooClass得到了someContainer,而不是其他MyContainer实例。我该怎么做?这种(单元)测试方法正确吗 public MyClass { ... public bool MyMet
public MyClass
{
...
public bool MyMethod(int a, int b, int c, out FooClass foo)
{
var someContainer = new MyContainer{
A = a,
B = b,
C = c
};
foo = new FooClass(someContainer,1,2,3);
...
return true;
}
...
}
您无法测试
foo
是否获取someContainer
,因为someContainer
只能从方法内部访问。该方法的一个适当测试是foo
在正确的位置包含a
、b
和c
,并且它包含一些MyContainer
对象。这将是对FooClass
构造函数的单元测试,该构造函数测试FooClass
对象是否包含正确的MyContainer
对象
如果您的
FooClass
将要更改,那么您的MyMethod
可能也会更改,因此对MyMethod
的任何测试也必须更改。它破坏了您的测试这一事实是好的,因为这意味着您需要查看该方法,并确保该方法符合您的要求,并且您正在测试它是否符合您的要求。您应该现在就为方法编写正确的测试,或者在FooClass
完成之前根本不需要编写任何测试。您不能测试foo
是否获得someContainer
,因为someContainer
只能从方法内部访问。该方法的一个适当测试是foo
在正确的位置包含a
、b
和c
,并且它包含一些MyContainer
对象。这将是对FooClass
构造函数的单元测试,该构造函数测试FooClass
对象是否包含正确的MyContainer
对象
如果您的
FooClass
将要更改,那么您的MyMethod
可能也会更改,因此对MyMethod
的任何测试也必须更改。它破坏了您的测试这一事实是好的,因为这意味着您需要查看该方法,并确保该方法符合您的要求,并且您正在测试它是否符合您的要求。您应该现在就为方法编写正确的测试,或者在FooClass
完成之前根本不需要编写任何测试。您不能测试foo
是否获得someContainer
,因为someContainer
只能从方法内部访问。该方法的一个适当测试是foo
在正确的位置包含a
、b
和c
,并且它包含一些MyContainer
对象。这将是对FooClass
构造函数的单元测试,该构造函数测试FooClass
对象是否包含正确的MyContainer
对象
如果您的
FooClass
将要更改,那么您的MyMethod
可能也会更改,因此对MyMethod
的任何测试也必须更改。它破坏了您的测试这一事实是好的,因为这意味着您需要查看该方法,并确保该方法符合您的要求,并且您正在测试它是否符合您的要求。您应该现在就为方法编写正确的测试,或者在FooClass
完成之前根本不需要编写任何测试。您不能测试foo
是否获得someContainer
,因为someContainer
只能从方法内部访问。该方法的一个适当测试是foo
在正确的位置包含a
、b
和c
,并且它包含一些MyContainer
对象。这将是对FooClass
构造函数的单元测试,该构造函数测试FooClass
对象是否包含正确的MyContainer
对象
如果您的FooClass
将要更改,那么您的MyMethod
可能也会更改,因此对MyMethod
的任何测试也必须更改。它破坏了您的测试这一事实是好的,因为这意味着您需要查看该方法,并确保该方法符合您的要求,并且您正在测试它是否符合您的要求。您应该现在就为方法编写正确的测试,或者在FooClass
完成之前根本不需要编写任何测试
这种(单元)测试方法正确吗
public MyClass
{
...
public bool MyMethod(int a, int b, int c, out FooClass foo)
{
var someContainer = new MyContainer{
A = a,
B = b,
C = c
};
foo = new FooClass(someContainer,1,2,3);
...
return true;
}
...
}
如果您想模拟依赖项,以便测试代码的特定单元(例如示例中的MyClass
),那么您需要考虑将代码组合到负责不同职责的服务中。在您的示例中,您的MyMethod
有几个职责:
MyContainer
FooClass
FooClass
时应使用的MyContainer
实例MyMethod
是否将特定的MyContainer
传递到FooClass
的愿望,您可以将职责1和职责2分离到新的类中。通常,在C#中,您会给这些类一个接口,并让MyClass
将这些接口中的每一个作为依赖项。例如
公共接口IFooClassProvider
{
FooClass CreateFooClass(MyContainer容器,int d,int e,int f);
}
公共接口IMyContainerProvider
{
MyContainer CreateMContainer(内部a、内部b、,