NUnit: я должен проверить, что объекты не являются нулевыми, прежде чем использовать их в утверждениях? - PullRequest
2 голосов
/ 16 апреля 2020

Я пишу тест, который вызывает метод, который потенциально может вернуть ноль. В этом конкретном c тесте возвращаемый объект должен не быть нулевым, а какое-то свойство в нем должно соответствовать указанному c значению. Пример:

var obj = thing.GetObject();
Assert.That(obj, Is.Not.Null);
Assert.That(obj.Name, Is.EqualTo("Name"));

Это моя привычка из C ++, где у вас обычно есть утверждение до использования указателя, так как доступ к null может привести к sh модульному тесту (и вы захотите чтобы избежать этого). Однако в C# доступ к нулевым объектам является обычным исключением. Является ли хорошей практикой делать то, что я сделал выше, или просто go вперед и получить доступ к объекту и полагаться на исключение, чтобы не пройти тестовый случай, если объект нулевой? Как в:

var obj = thing.GetObject();
Assert.That(obj.Name, Is.EqualTo("Name")); // Throws if `obj` is null

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

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

A NullReferenceException - признак того, что вы что-то упустили. Утверждая, что результат не равен нулю перед проверкой свойства, не что-то пропустил.

0 голосов
/ 16 апреля 2020

Боюсь, это зависит.

В приведенном вами примере нет начальной настройки, но вы утверждаете, что вызываемый метод может иногда возвращать ноль. Без этой настройки вы не можете проверить на нулевое или ненулевое значение, потому что (как указано) либо возможен. Такой тест бесполезен.

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

У вас также должен быть тест, в котором объект настроен на возврат значения null и тест для этой ситуации.

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