Я ищу пример, иллюстрирующий трудности при тестировании класса static class vs. instance. Может ли кто-нибудь его предоставить?Пример трудностей при тестировании статических классов (C#)
ответ
Говорят, что класс, который использует другие типы, имеет зависимости от других типов. Когда вы тестируете метод в классе, вы обычно пытаетесь проверить, что делает этот метод, а не то, что делают зависимости. Обычный способ настроить ваши объекты для поддержки этих сценариев - использовать dependency injection. Инъекционная инъекция - это общий шаблон, который повышает тестируемость. Статические классы плохо работают с этим шаблоном, что делает модульное тестирование классов, которые используют статические классы.
Например, если у вас есть класс «A», который вы хотите протестировать, и он использует статический класс «B», который делает то, что вы не хотите тестировать, например, попадание в базу данных, класс A теперь трудно проверить.
class A
{
// this is hard to test because of the static call through B
public void MethodToTest()
{
// ...
B.HitTheDatabase();
// ...
}
}
Есть способы обойти это, например, писать обертки вокруг B и впрыскиванием в А, или с помощью Moles рамки
Ну, как же проверить класс для разницы во времени, если он использует 'DateTime .Now'? – Oded
Возможно, вы захотите проверить [этот ответ] (http://stackoverflow.com/a/10633109/343266). –
Поиск SO [вверху справа] со «статическим [unit-testing]». Вы найдете много сложностей. Статические классы с чистыми функциями нетрудно проверить - например, методы класса Math. Читайте также: http://stackoverflow.com/a/4222788/1695 – Gishu