Как я могу утверждать, что метод определенного класса был вызван перед другим методом другого класса? - PullRequest
3 голосов
/ 11 мая 2011

Вот пример того, что у меня есть:

public class ClassToBeTestedTest
{
    private Mock<IAService> aService;
    private Mock<IAnotherService> anotherService;
    private ClassToBeTested testedClass;

    [SetUp]
    public void setup()
    {
        aService = new Mock<IAService>();
        anotherService = new Mock<IAnotherService>();
        testedClass = new ClassToBeTested(aService.Object, anotherService.Object);
    }

    [Test]
    public void ShouldCallAServiceMethodBeforeAnotherService()
    {
        testedClass.Run();
        aService.Verify(x=>x.AMethod(), Times.Once());
        anotherService.Verify(x=>x.AnotherMethod(), Times.Once());
    }
}

В этом примере я просто проверяю, были ли они вызваны, не важно последовательность ...

Я собираюсь настроитьобратный вызов в тех методах, которые добавляют какой-то элемент управления последовательностью в тестовый класс ...

edit: я использую moq lib: http://code.google.com/p/moq/

Ответы [ 3 ]

2 голосов
/ 11 мая 2011

Rhino Mocks поддерживает заказы в макете, см. http://www.ayende.com/Wiki/Rhino+Mocks+Ordered+and+Unordered.ashx

Или, возможно, последовательности Moq, http://dpwhelan.com/blog/software-development/moq-sequences/

См. Здесь аналогичный вопрос по этому вопросу, Как проверить порядок вызова методов с помощью Moq

1 голос
/ 19 мая 2011

Альтернативное решение, убедитесь, что первый метод был вызван при вызове второго:

public class ClassToBeTestedTest
{
    private Mock<IAService> aService;
    private Mock<IAnotherService> anotherService;
    private ClassToBeTested testedClass;

    [SetUp]
    public void setup()
    {
        aService = new Mock<IAService>();
        anotherService = new Mock<IAnotherService>();
        testedClass = new ClassToBeTested(aService.Object, anotherService.Object);
    }

    [Test]
    public void ShouldCallAServiceMethodBeforeAnotherService()
    {
        //Arrange
        anotherService.Setup(x=>x.AnotherMethod()).Callback(()=>{
            //Assert
            aService.Verify(x=>x.AMethod(), Times.Once());
        }).Verifyable();

        //Act
        testedClass.Run();
        //Assert
        anotherService.Verify();
    }
}
0 голосов
/ 11 мая 2011

Запишите отметку времени в каждом из ваших издевательств и сравните их.

[Test]
public void ShouldCallAServiceMethodBeforeAnotherService()
{
    testedClass.Run();
    //Not sure about your mocking library but you should get the idea
    Assert(aService.AMethod.FirstExecutionTime 
        < anotherService.AnotherMethod.FirstExecutionTime, 
        "Second method executed before first");
}
...