Написание одного модульного теста, состоящего из нескольких тестовых случаев, нарушает принципы модульного тестирования? - PullRequest
3 голосов
/ 07 августа 2009

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

Test1(){
  Assert(TestCase1);
  Assert(TestCase1);
  Assert(TestCase3);
  ...
}

или

Test1(){
  Assert(TestCase1);
}
Test2(){
  Assert(TestCase2);
}
Test3(){
  Assert(TestCase3);
}
...

Примечание. Все контрольные примеры тесно связаны между собой. Между ними есть только логические различия.

Ответы [ 3 ]

8 голосов
/ 07 августа 2009

Один тестовый случай = одно условие для проверки, некоторые люди переводят условие в утверждение, это неправильно, условие может состоять из одного или нескольких утверждений

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

public void testPawnCanMoveTwoSquaresAheadFromInitialRow (){
    [...]
    //Test moving first a white pawn
    assertPawnCanMoveTwoSquaersAheadFromInitialRow ("a2", "a4");
    //Test moving fater a black pawn
    assertPawnCanMoveTwoSquaersAheadFromInitialRow ("h7", "h5");
}

private void assertPawnCanMoveTwoSquaersAheadFromInitialRow (String from, String to){
    [...]
    Piece movingPiece = board.getSquareContent(from);
    assertTrue (movingPiece.isPawn ());
    assertTrue (board.move (from, to));
    assertTrue (board.getSquareContent(from).isEmpty());
    assertTrue (board.getSquareContent(to).isPawn());
    [...]
}

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

Вы можете проверить эту недавнюю статью, которую я написал в своем блоге: Как писать хорошие тесты

0 голосов
/ 07 августа 2009

Второй сценарий помогает вам точно определить, что пошло не так, и вы всегда будете знать результат всех утверждений.

Вы можете испытать искушение думать, что первый сценарий имеет преимущество в том, что вы можете использовать одно и то же расположение для всех утверждений. Но в случае неудачи первого утверждения вы пропустите, пройдут ли два других.

Я бы предложил второй вариант, когда большинство фреймворков для тестирования позволяет вам выполнить одноразовое расположение для многих тестов.

0 голосов
/ 07 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...