Утверждение параметров RestRequest гамака с помощью Rhino Mocks - PullRequest
0 голосов
/ 03 ноября 2011

Сценарий: Проверьте, что мой класс выдает RestRequest с предоставленным IRestclient, где определенные параметры установлены в запросе.

    public class MyClass {
    private readonly IRestClient _client;

    public MyClass(IRestClient client) {
        _client = client;
    }

    void DoIt() {
        var req = new RestRequest { Method = WebMethod.Get, Path = "/DoIt" };
        req.AddParameter("key1", "value1");
        req.AddParameter("key2", "value2");

        var resp = _client.Request(req);
    }

}

[TestFixture]
public class MyClassTests {
    [Test]
    public void VerifyDoIt() {
        var client = MockRepository.GenerateStrictMock<IRestClient>();
        var resp = new RestResponse { StatusCode = HttpStatusCode.OK };
        client.Expect(x => x.Request(null)).IgnoreArguments().WhenCalled(inv => {
            var req = inv.Arguments[0] as RestRequest;
            //NO WAY TO VALIDATE THAT PARAMETERS HAS BEEN SET!
            inv.ReturnValue = resp;
        });
    }
}

Гамак просто так не тестируется или я что-то упускаю?

Редактировать: это не вопрос о том, как получить доступ / проверить параметры метода с помощью Rhino.Mocks, а скорее о том, как / если Hammock поддерживает тестирование / проверку того, что параметры запроса установлены в сценариях модульного тестирования.

1 Ответ

0 голосов
/ 03 ноября 2011

Если вам нужно проверить параметры, отправленные в метод mock / stubbed, вы можете использовать метод «GetArgumentsForCallsMadeOn» Rhino.Mocks. Передайте ему лямбду, представляющую сделанный вызов, и он вернет вам неровный массив. Первый элемент ([0]) будет массивом аргументов, переданных при первом вызове метода. Второй элемент ([1]) будет массивом аргументов, переданных во второй раз, когда был вызван метод, и т.д ...

Вы можете переписать свой тест следующим образом, чтобы проверить данные запроса:

var client = MockRepository.GenerateStub<IRestClient>();

var mc = new MyClass(client);
mc.DoIt();

client.AssertWasCalled(c => c.Request(null), o => o.IgnoreArguments());
var req = (RestRequest)client.GetArgumentsForCallsMadeOn(c => c.Request(null), o => o.IgnoreArguments())[0][0];

Assert.AreEqual("/DoIt", req.Path);
Assert.AreEqual(WebMethod.Get, req.Method);
...