Должен ли я инициализировать каждый метод тестирования, или только класс, или ни того, ни другого? - PullRequest
3 голосов
/ 04 февраля 2012

Вопрос, который я ставлю перед собой (а теперь и перед всем миром, а возможно, и за его пределами), находится в моем комментарии ниже:

[TestMethod()]
public void SetMessageTypeSubcodeTest()
{
    int AMessageTypeSubcode;
    // Should I put this class instantiation in MyTestInitialize?
    MessageClass target = new MessageClass(); 
. . .

Должен ли я сделать это:

[TestInitialize()]
public void MyTestInitialize()
{
MessageClass target = new MessageClass(); 
}

... или это:

[ClassInitialize()]
public void MyTestInitialize()
{
MessageClass target = new MessageClass(); 
}

... или ни то, ни другое?

И поскольку C # /. NET является сборщиком мусора, нет необходимости освобождать MessageClass в TestCleanup () илиМетод ClassCleanup (), есть?

Ответы [ 3 ]

3 голосов
/ 04 февраля 2012

Вы хотите новый экземпляр класса, который вы тестируете для каждого теста в вашем наборе.Это предотвратит любые возможные побочные эффекты (которые могут возникнуть) и, как следствие, тесты (которые должны быть единицы , разделенные), влияющие друг на друга.

2 голосов
/ 04 февраля 2012

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

1 голос
/ 25 марта 2012

Нет настоящего «правильного» ответа на этот вопрос. Лично, учитывая ваш код, я бы не стал применять этот экземпляр класса к какому-либо методу установки. Я бы сохранял это внутри каждого теста, чтобы сделать тест более читабельным и завершенным.

Я считаю, что подходящее время для использования метода ClassInitialize или TestInitialize - это когда вы хотите создать единую непротиворечивую среду для всех тестов этого класса. Вот почему мне не нравится подход «один тестовый класс на системный класс». Каждый тестовый класс - это прибор, который обеспечивает согласованную среду для его тестов.

Чрезмерно агрессивный рефакторинг тестового кода для перемещения каждого «нового Foo ()» в TestFixture приведет к чудесным факторизованным, но трудным для чтения модульным тестам. А для тестов я ценю читабельность выше этого уровня факторинга.

...