单元测试从c#中的另一个方法调用的方法

时间:2012-01-06 12:41:53

标签: c# unit-testing

请帮助我:

在此处,我需要通过Add(...)中的Calling(...)方法调用此MyAnotherClass方法。当我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**
    }
}

由于

初学者

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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]。

答案 2 :(得分: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);
    }
}

答案 3 :(得分:1)

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

答案 4 :(得分: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];
}

然后,您可以更轻松地测试它。