Носорог издевается - этот тест выглядит разумным? - PullRequest
1 голос
/ 01 декабря 2009

Я только что создал следующий тест с использованием насмешек Rhino. Выглядит ли мой тест корректным и имеет ли смысл для тех, кто более опытен с насмешками?

Я немного смущен тем, что мне не пришлось использовать методы DynamicMock () или StrictMock () для создания, казалось бы, действительного теста.

Этот тест проверяет, что метод Add был вызван на предоставленной ICachingStrategy с предоставленными параметрами.

    object o = new object();
    DateTime d = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day + 1, 0, 0, 0);
    CacheStorageStyle s = CacheStorageStyle.Unmodified;
    string f = "test";

    //arrange  
    var stubStrategy = MockRepository.GenerateStub<ICachingStrategy>();
    var stubEncoder = MockRepository.GenerateStub<ICacheItemEncoder>();
    stubStrategy.Stub(x => x.Add(o,d,s,f)).Return("test:key");            
    stubEncoder.Stub(x => x.Encode(o,s)).Return(o);

    _mocks.ReplayAll();

    //act
    ICache c = new Cache(stubStrategy, stubEncoder);
    c.Add(o, d, s, f);

    //assert
    stubStrategy.AssertWasCalled(x => x.Add(o,d,s,f)); 

Ответы [ 2 ]

4 голосов
/ 01 декабря 2009

Вопрос в том, удастся ли это? Вы ожидаете этого? Если ответы да и да, то тест хороший. Вы можете дополнительно протестировать тест, принудительно провалив его, начав вызов Add() в своей реализации. Если метод Add() не вызывается, проверка должна завершиться неудачей.

Здесь - соответствующая документация, объясняющая разницу между заглушками и макетами. Существенным отличием является то, что заглушки «никогда не приведут к провалу теста». Они существуют только для того, чтобы заставить тестовый код работать. Документация далее рекомендует, чтобы окурки были предпочтительнее, чем макеты, где это возможно.

Ваш тест кажется мне действительным, потому что вас в первую очередь интересует, был ли вызван метод Add(), и вы явно подтверждаете этот вызов. Вы не тестируете вызовы других методов, поэтому вместо того, чтобы насмехаться над ними, вы заглушаете их.

1 голос
/ 10 декабря 2009

re: Strict vs Dynamic - еще одна вещь, на которую стоит обратить внимание, это то, что в RhinoMocks 3.5 вызов MockRepository.GenerateMock () не будет генерировать строгий макет.

В зависимости от того, что вы тестируете, вам может / может быть все равно, что было / не было вызвано на вашем макете.

...