#c# #asp.net-mvc #visual-studio #unit-testing #nunit
#c# #asp.net-mvc #visual-studio #модульное тестирование #nunit
Вопрос:
У меня есть модульный тест с классом обслуживания, я хочу издеваться AppDomain.CurrentDomain.BaseDirectory
var someCLass = new SomeClass()
над этим классом без изменений.
В этом классе он используется в качестве пути для создания новых путей для чтения файлов. Но если тест выполняется, AppDomain.CurrentDomain.BaseDirectory
он будет изменен на другой каталог.
Я не хочу использовать изоляцию typemock, но это похоже на возможное исправление, я хочу найти другой способ решить эту проблему, возможно, с Moq
помощью.
public SomeClass
{
SomeClass()
{
//Use something like that
var path = AppDomain.CurrentDomain.BaseDirectory;
}
}
//Test Class
[TestFixture]
public class TestClass
{
private SomeClass someClass;
[Test]
public void SomeTest()
{
someClass = new SomeClass();
}
}
//Change AppDomain.CurrentDomain.BaseDirectory for unit test without changing original class.
Комментарии:
1. Не абстрагируйтесь от этой статической зависимости
2. Помогает ли это? leotwng.blogspot.com/2010/06 /…
Ответ №1:
Возможно, вы не захотите менять свой класс, но это именно то, что вы должны делать. Если вы хотите провести надлежащее тестирование, вам нужно с самого начала убедиться, что код действительно поддается тестированию.
Существует простое решение, которое не требует большого количества изменений, просто добавьте новый параметр либо в конструктор, либо в метод, который вы действительно хотите протестировать, и передайте фактический путь к нему.
Ваш код может выглядеть следующим образом:
public SomeClass
{
public SomeClass(string baseLocation)
}
затем, когда вы создаете его экземпляр, вы можете просто сделать что-то вроде
var basePath = AppDomain.CurrentDomain.BaseDirectory;
var someClass = new SomeClass(basePath);
Теперь это позволяет вводить путь откуда угодно, включая тесты. Если вам нужен тестируемый код, вам нужно удалить такие зависимости. Дата и время.Теперь еще один пример, который можно ввести таким образом.
Еще одним преимуществом этого метода является то, что вам не нужно беспокоиться о том, чтобы что-то издеваться, и ваш тестовый код становится очень простым и действительно доступным для обслуживания