NUnit хранит статические данные между тестами - PullRequest
6 голосов
/ 30 мая 2011

У меня есть статический класс, который я использую для хранения моих тестовых данных. Когда я ссылаюсь на это в моих тестах NUnit, все сделанные мной изменения сохраняются в тестах.

Например, у меня есть этот код в моем тесте:

OrderDto orderDto = SampleData.OrderDto;
OrderDetailDto orderDetailDto = SampleData.OrderDetailDto;
orderDto.OrderDetails.Add(orderDetailDto);

А пример данных выглядит примерно так:

public static class SampleData {
    public static OrderDto OrderDto = new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" };
}

При первом запуске orderDto имеет 0 OrderDetails. Второй раз он имеет 1, затем 2 и т. Д. Я думал, что между тестами NUnit ничего не сохранилось. Кеширует ли он статические свойства?

Ответы [ 3 ]

9 голосов
/ 30 мая 2011

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

Большинство структур модульных тестов предоставляют способ инициализации и очистки вашего состояния дои после теста.В NUnit способ сделать это - использовать метод с атрибутом [SetUp].Этот метод выполняется перед каждым тестом.

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

[TestFixture]
public class MyTests {

  OrderDto OrderDto;
  OrderDetailDto;
  [SetUp]
  public void Setup() {
    _OrderDto = new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" };
    _OrderDetailDto = new OrderDetailDto {/*Sample data*/};
  }

  [Test]
  public void TestOrderDetailIsAddedToOrder() {
    orderDto.OrderDetails.Add(_OrderDetailDto);
  }
}
7 голосов
/ 30 мая 2011

Тесты должны быть изолированными, но это не означает, что они автоматически.

NUnit будет запускать метод TestFixture, помеченный [SetUp] перед каждым тестом и [TearDown]после этого.Вы можете использовать этот и другие атрибуты NUnit для настройки вашего прибора.

0 голосов
/ 30 мая 2011

Кажется, я ответил на свой вопрос немного более странно.Все еще не уверен, почему это обновляло объект, но если я изменяю статический класс на это, он работает:

public static class SampleData {
    public static OrderDto OrderDto {
        get { return new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" }; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...