2013-03-01 141 views
1

请看看下面的代码单元测试调用另一个类的方法的方法

int sum(int a, int b) 
{ 
    int x = memberInstance.xyz(a); // memberInstance is an object of another class 
    ..... 
    ..... 
} 

说,它也被称为是1-10之间XYZ方法返回的数字。 现在,我想开发sum方法的单元测试方法,我想用任意返回值[1-10之间的任何值]替换方法调用memberInstance.xyz(a)。请让我知道我该怎么做到这一点?请尽可能提供示例代码。

回答

5

您应该使用它的接口。

public interface IMemberInstance 
{ 
    int xyz {get;} 
} 

public class MemberInstance : IMemberInstance 
{ 
... // the real class's implementation + code here 
} 

public class MockMemberInstance : IMemberInstance 
{ 
    // the test class can return a test value 
    int xyz(int a) { return 10; } 
} 

然后在您的类进行测试(例如MyClass的)

private IMemberInstance memberInstance; 

public MyClass(IMemberInstance memberInstance) 
{ 
    this.memberInstance = memberInstance; 
} 

int sum(int a, int b) 
{ 
    int x = memberInstance.xyz(a); // memberInstance is an object of another class 
    ..... 
    ..... 
} 

让这个你可以在IMemberInstance传递给类进行测试。这样,您就可以与测试类(模拟执行)

+0

我已经开发了许多类和这些类的实例越来越在使用其他类。根据您的解决方案,我需要为所有类开发接口,并且还必须更改实际使用其他类实例的类的代码(需要引用接口而不是使用实际类的引用)。有没有其他解决问题的方法? – 2013-03-01 08:40:25

+0

不是真的......这基本上是这样做的方式。在开发过程中最好牢记测试,因此您不必回头修改。接口使您可以松散地耦合对象的依赖关系的实现,以便轻松测试它们。 – Alan 2013-03-01 09:15:51

+0

明白了。将来我会努力发展,牢记这一点。但是如果memberInstance是一个Container类的私有字段,如何在test方法中实例化memberInstance? – 2013-03-01 10:21:45

相关问题