2012-01-06 139 views
2

请帮我在这:单元测试方法从另一个方法调用C#

在这里我需要通过Calling(...)方法MyAnotherClass调用此方法Add(...)。当我Assert它给出了一个错误。请告诉我路径。

public class MyClass 
{ 
    public List<int> number = new List<int>(); 

    public void Add(int a, int b) 
    { 
     int c = a + b; 
     number.Add(c); 
    } 
} 

public class MyAnotherClass 
{ 
    public void CallingMethod(int c, int d) 
    {   
     MyClass mc = new MyClass(); 
     mc.Add(c, d); 
    } 
} 

[TestClass] 
public class UnitTest1 
{ 
    [TestMethod] 
    public void TestMethod1() 
    { 
     MyAnotherClass mac = new MyAnotherClass(); 

     MyClass mc = new MyClass(); 

     mc.Add(2, 3); 
     Assert.AreEqual(5, mc.number[0]);// **this work fine** 

     mac.CallingMethod(2, 3); 
     Assert.AreEqual(5, mc.number[0]);// **but this not** 
    } 
} 

感谢

初学者

+0

你试过调试吗?第二个'mc.number [0]'提供了什么值? – ediblecode 2012-01-06 13:51:19

回答

2

您的类MyAnotherClass返回void,并且不提供可以从内部MyClass检索数据的公共属性。

你想要的东西,如:

public class MyAnotherClass 
{ 
    public MyClass mc = new MyClass(); 
    public void CallingMethod(int c, int d) 
    { 
     mc.Add(c, d); 
    } 
} 

然后,在您的测试类,你会打电话mac.mc.number [0]比较。

+0

非常感谢你..它工作正常! – iJay 2012-01-06 13:21:11

3

你永远不更新在“MyAnotherClass”称为“MC”的引用的“MC”在第二种情况下引用的对象,而是一个新的对象类。

1

您有两个MyClass实例,一个是在测试中实例化的,另一个是MyAnotherClass。如果你想只有一个实例,你应该把它传递给MyAnotherClass构造或使CallingMethod

public class MyAnotherClass 
{ 
    private readonly MyClass _myClass; 

    public MyAnotherClass(MyClass myClass) 
    { 
     _myClass = myClass; 
    } 

    public void CallingMethod(int c, int d) 
    {   
     _myClass.Add(c, d); 
    } 
} 
1

您尝试访问“MC”的对象,在CallingMethod定义,其范围之外的参数。如果MyAnotherClass在其构造函数中获取MyClass的实例(例如),请使用属性引用它,然后更新它,然后测试这个新引用 - 它将起作用。

1

我不认为该方法使任何意义,

,或者你可以告诉我,它可以做什么?

public void CallingMethod(int c, int d) 
{   
    MyClass mc = new MyClass(); 
    mc.Add(c, d); 
} 

你最好发布你的完全源代码这种方法。

或者,如果你可以,你可以改变像

public int CallingMethod(int c, int d) 
{   
    MyClass mc = new MyClass(); 
    mc.Add(c, d); 
    return mc.number[0]; 
} 

然后,该方法,可以测试更容易。