Я новичок в модульном тестировании, поэтому простите меня, если я не смогу правильно объяснить этот вопрос. Я читаю книгу «Искусство модульного тестирования второго издания» и пытаюсь реализовать модульное тестирование в моем проекте. В настоящее время я застрял или запутался при тестировании, используя насмешку (используя NSubstitute в качестве насмешливой структуры).Использование Nsubstitute для насмешек, но получение ошибки
Вот мой сценарий:
У меня есть два интерфейса ICommand
и IUser
public interface ICommand
{
string execute();
}
public interface IUserCalendar
{
string LoadCalendar();
}
У меня есть класс, который реализует LoadCalendar
ICommand
:
public class LoadCalendar : ICommand
{
private IUserCalendar user;
public string execute()
{
return this.user.LoadCalendar();
}
public LoadCalendar(IUserCalendar obj)
{
this.user = obj;
}
}
ViewCalendar
IUserCalendar
реализует:
public class Viewer : IUserCalendar
{
public string LoadCalendar()
{
return "Viewer Load Calendar Called";
}
}
Использование класса агента Я вызываю команду для конкретного запроса. (Здесь я показываю только один запрос LoadCalendar
для одного пользователя, но у меня больше команд и больше пользователей)
Мой клиент имеет объект invoker, который вызывает команду для конкретного пользователя.
public class Client
{
public Client()
{ }
public string LoadCalendar(ICommand cmd)
{
Invoker invoker = new Invoker(cmd);
return invoker.execute();
}
}
Теперь мне нравится тестировать класс клиента, который, когда он требует определенного пользователя, должен возвращать надлежащий объект или сообщение.
[Test]
public void client_Load_Calendar_Administrator()
{
IUserCalendar calanedar = Substitute.For<IUserCalendar>();
ICommand cmd = Substitute.For<ICommand>(calanedar);
Client c = new Client();
c.LoadCalendar(cmd, calanedar).Returns(Arg.Any<string>());
}
Я не знаю, где я делаю неправильно, и это ошибка.
NSubstitute.Exceptions.SubstituteException: Невозможно предоставить аргументы конструктора при замене интерфейса.
Любая помощь действительно оценена. Извините за длинный вопрос.
Спасибо за редактирование Марка. Если вы знаете любого, кто может ответить на этот вопрос, пожалуйста, отправляйте его. – fais