модульное тестирование вызова метода из другого метода в c # - PullRequest
2 голосов
/ 06 января 2012

Пожалуйста, помогите мне в этом:

Здесь мне нужно вызвать этот 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 ]

3 голосов
/ 06 января 2012

Вы никогда не обновите объект, на который ссылается «mc» во втором случае, но новый объект со ссылкой «mc» в классе «MyAnotherClass».

2 голосов
/ 06 января 2012

Ваш класс 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] для сравнения.

1 голос
/ 06 января 2012

Я не думаю, что метод имеет какой-либо смысл,

или не могли бы вы сказать мне, что он может сделать?

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];
}

Затем вы можете проверить его более просто.

1 голос
/ 06 января 2012

Вы пытаетесь получить доступ к объекту "mc", определенному в CallingMethod, вне его области действия.Если бы MyAnotherClass должен был получить экземпляр MyClass в своем конструкторе (например), ссылаться на него с помощью свойства, а затем обновить его и проверить эту новую ссылку - это сработало бы.

1 голос
/ 06 января 2012

У вас есть два экземпляра 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...