Я использую Rhino Mocks для ограничения функциональности конечной точки SOAP и по большей части работает. Но, интерфейс довольно своеобразно и я изо всех сил, чтобы получить следующие работы (я переименовал классы для простоты)Rhino Mocks - Arg <T>, чтобы опустить некоторые параметры
public interface IWebService
{
void CopyFile(Request request);
}
public interface IService
{
void CopyFile(string filename, byte[] data);
}
public class Request
{
public string Filename { get; set; }
public byte[] Data { get; set; }
}
public class Service : IService
{
IWebService _service;
public Service(IWebService service)
{
_service = service;
}
public void CopyFile(string filename, byte[] data)
{
_service.CopyFile(new Request() {Filename = filename,Data = data });
}
}
Теперь в моем тесте у меня есть что-то вроде этого
[TestCase]
public void TestFileCopyFailsIfFilenameIsMissing()
{
IWebService serviceMock = MockRepository.GenerateMock<IWebService>();
serviceMock.Expect(x => x.CopyFile(Arg<Request>.Is.Equal(new Request() { Filename = Arg<string>.Is.Null, Data = Arg<byte[]>.Is.Anything }))).Throw(new Exception());
Service service = new Service(serviceMock);
service.CopyFile(null, new byte[] { });
}
Который выдает исключение: Исключение типа «System.InvalidOperationException» произошло в Rhino.Mocks.dll, но не было обработано в коде пользователя
Дополнительная информация: Используйте AR ONLY только во время вызова метода mock во время записи. Ожидается 1 аргумент, 3 определены.
Я пробовал все возможности в мире на этом, но не могу понять это правильно. Если я не использую Arg и использовать
Expect(null, new byte[]{});
всегда будет проходить независимо от того, что
Я думаю, вы должны overide Равно метод в Reqeust, чтобы заставить его работать .... или вы должны отдельно сравнить файл и данные вместо весь запрос – Viru
Привет Виру, я не могу переопределить запрос, поскольку он создается автоматически с помощью инструмента каждый раз, когда создается веб-сервис, и я не являюсь поставщиком веб-интерфейса. Есть ли что-то еще, что можно сделать? –
Вы можете получить доступ к свойству FileName и Data, выполнив что-то liek this Arg .FileName ?? Идея заключается в том, что вы можете получить доступ к определенному свойству, а затем сравнить их вместо всего запроса. –
Viru