Подтвердить что ты не робот

Использует ли Одиночка как подтверждение плохой практике?

Я тестирую метод, который управляет коллекцией. Учитывая набор параметров, он должен содержать ровно один элемент, который соответствует условию. Изменить: коллекция может содержать несколько других элементов, не соответствующих условию.

Я использую Single, чтобы проверить это поведение, которое работает нормально, поскольку оно не пройдет тест, выбросив исключение, если нет матч во всех или более одного матча. Но нет фактического утверждения, которое каким-то образом нарушает a rrange, a ct, a ssert. Поэтому мне интересно, если это плохая практика, и если есть лучший способ сделать это.

Следуя псевдокоду, чтобы продемонстрировать мой вопрос:

[TestMethod]
public void TestMethod()
{
    List list = MethodToTest(param1, param2);

    list.Single(s => s.Matches(condition));

    //No actual Assert
}
4b9b3361

Ответ 1

Мне интересно, если это плохая практика, и если есть лучший способ сделать это.

Да и да.

он не завершит проверку, исключив исключение, если совпадение отсутствует или больше одного совпадения.

Не пропустите тест, выбросив исключение. Откажитесь от теста, пропустив тест. У вашей тестовой среды есть механизм для утверждения условия, проверяемого тестом. Вы купили эту тестовую структуру, и теперь вы сопротивляетесь ее функциям. Используйте тестовую среду, поскольку она была предназначена для использования, или, если вам не нравится, откажитесь от нее и выберите структуру, которая вам нравится лучше. Но не делайте end-run вокруг своих механизмов.

Неожиданные исключения не обязательно являются ошибками тестирования; они могут быть ошибочными. Вы должны быть в состоянии сказать разницу. Способ, которым вы говорите: если исключение возникает в тестируемом коде, это ошибка в коде. Если он возникает в тестовом коде, это ошибка в тесте. И теперь вы пойдете и обнаружите ошибку в тестируемом коде, сделав бросок кода тестирования. И теперь сложнее сказать, где ошибка. Не заставляйте ваше будущее думать, что это сложно; не пишите удивительный код, который преднамеренно избегает соглашений тестовой платформы.