Потеря поля делегированного значения - PullRequest
0 голосов
/ 17 января 2011

Я пытаюсь понять, что здесь происходит.Я пишу некоторые модульные тесты для асинхронного удаленного кода

    // a global variable to all unit tests in the class
    private List<ModuleInfo> _moduleInfo;

    [TestMethod]
    public void MyFunction()
    {
           _moduleInfo = new List<ModuleInfo>();

            netCall.MessageRecieved +=
                    delegate(object sender, MessageTestRecievedEventArgs e)
                    {
                       // I get a correct response - array of Modules
                       // then try to add to global variable
                       foreach (EducateMe.Shared.Types.ModuleInfo mIn in arr)
                       {
                           _moduleInfo.Add(mIn);
                       }
                    }

    }

// поэтому после цикла переменная _moduleInfo count = 9 // следующий тест, который запускается, однако переменная пуста - поэтому, когда она выходитзакрытие сбрасывается каким-то образом - как я могу сохранить это значение между тестами?

Обновление -

Так определен массив.Там не используется [Setup] или [TearDown].

[TestClass]
public class MyUnitTest
{
  private List<ModuleInfo> _moduleInfo;

  // then the function definition

}

Существует второй модульный тест, который представляет собой просто попытку прочитать значение, созданное циклом.Таким образом, тест MyFunction () проходит нормально, но как только он выходит из закрытия, переменная исчезает.

Приветствия

PS.Это пришло с созданным VS модульным тестом

    private TestContext testContextInstance;

    /// <summary>
    ///Gets or sets the test context which provides
    ///information about and functionality for the current test run.
    ///</summary>
    public TestContext TestContext
    {
        get
        {
            return testContextInstance;
        }
        set
        {
            testContextInstance = value;
        }
    }

Ответы [ 2 ]

0 голосов
/ 17 января 2011

Вы уверены, что это не просто создание нового экземпляра вашего класса теста для каждого теста? Мне кажется, что это разумное поведение - один тест не должен полагаться на выполнение других тестов. Похоже, вы должны использовать [SetUp] вместо.

0 голосов
/ 17 января 2011

Не знаю, какую среду тестирования вы используете, но в NUnit есть методы, которые могут иметь атрибуты [Setup] и [TearDown]. Может быть, одна из этих функций сбрасывает список?

Тем не менее, это очень плохой дизайн для юнит-тестов. Таким образом вы создаете связь между двумя тестами. Таким образом, вы никогда не сможете запустить второй тест без запуска первого теста и как убедиться в том, в каком порядке выполняются тесты?

Поэтому вместо этого напишите некоторую служебную функцию, которая заполняет _ moduleInfo в каждом тесте несколькими заглушками, которые содержат ожидаемые значения.

Очень хорошим источником информации о том, как проводить тестирование, является книга Искусство модульного тестирования: с примерами в .Net .

...