2008-09-10 13 views
1

Скажем, у меня есть интерфейс IFoo, который я издеваюсь. В этом интерфейсе есть 3 метода. Мне нужно проверить, что тестируемая система вызывает хотя бы один из трех методов. Меня не волнует, сколько раз или с какими аргументами он вызывает, но в случае, когда он игнорирует все методы и не затрагивает фальшивый IFoo, это случай сбоя.Rhino Mocks - Как я могу проверить, называется ли хотя бы одна из групп методов?

Я просматриваю документацию Expect.Call, но не вижу простой способ сделать это.

Любые идеи?

ответ

1

Вы можете дать носорогу издеваться за лямбдой, которую нужно запустить при вызове функции get. Эта лямбда может затем увеличить счетчик. Установите счетчик> 1, и все готово.

Комментарий от Don Kirkby: Я считаю, что Mendelt относится к методу Do.

+0

Я считаю, что Мендельт ссылается на метод Do. – 2008-09-30 19:59:42

+0

Спасибо за полезный комментарий к моему слишком короткому ответу. Добавил его к вопросу. – Mendelt 2008-09-30 20:19:54

0

Не уверен, что это отвечает на ваш вопрос, но я обнаружил, что если мне нужно сделать что-нибудь подобное с Rhino (или любой подобной структурой/библиотекой), все, что я не знал, как делать авансом, Лучше всего просто создать ручной макет.

Создание класса, который реализует интерфейс, и устанавливает для общего логического поля значение true, если какой-либо из методов будет вызван, будет тривиально простым, вы можете дать классу описательное имя, что означает, что (что наиболее важно) просмотр следующего лица код сразу поймет это.

0

Если вы правильно поняли, что хотите проверить, что интерфейс вызывается хотя бы один раз на любом из трех указанных методов. Просматривая the quick reference Я не думаю, что вы можете сделать это в Rhino Mocks.

Интуитивно я думаю, что вы пытаетесь написать тест, который является хрупким, а это Плохая вещь. Это подразумевает неполную спецификацию тестируемого класса. Я призываю вас подумать над дизайном, чтобы испытуемый класс и тест могли иметь известное поведение.

Однако, чтобы быть полезным, например, вы всегда можете сделать это (, но не).

[TestFixture] 
public class MyTest { 

    // The mocked interface 
    public class MockedInterface implements MyInterface { 
     int counter = 0; 
     public method1() { counter++; } 
     public method2() { counter++; } 
     public method3() { counter++; } 
    } 

    // The actual test, I assume you have the ClassUnderTest 
    // inject the interface through the constructor and 
    // the methodToTest calls either of the three methods on 
    // the interface. 
    [TestMethod] 
    public void testCallingAnyOfTheThreeMethods() { 
     MockedInterface mockery = new MockedInterface(); 
     ClassUnderTest classToTest = new ClassUnderTest(mockery); 

     classToTest.methodToTest(); 

     Assert.That(mockery.counter, Is.GreaterThan(1)); 
    } 
} 

(Кто-то проверить мой код, я написал это из моей головы теперь и не написал C# материал для около года)

Мне интересно знать, почему вы Но все же это делается.

 Смежные вопросы

  • Нет связанных вопросов^_^