2016-04-26 1 views
0

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

Мое дело: Вызов одной и той же услуги дважды, с разными значениями. Я хочу отдельные тесты для проверки каждого вызова. Если какой-либо из параметров не имеет ожидаемого значения, я бы хотел получить сообщение об ошибке. Аналогично тому, как вы делаете Assert.AreEqual().

Прямо сейчас я получаю «Звонок не случилось», что совершенно понятно, потому что я понимаю, что это то, что я тестирую. Но я хотел бы иметь возможность проверить, что конкретный вызов был сделан только один раз, и если бы этого не произошло, я хотел бы видеть, какие значения использовались, чтобы этого не произошло.

Я использовал это решение: http://thorarin.net/blog/post/2014/09/18/capturing-method-arguments-on-your-fakes-using-fakeiteasy.aspx , когда у меня был только один звонок, но с двумя вызовами он не работает.

[TestFixture] 
public class TestClass 
{ 
    [Test] 
    public void TestOne() 
    { 
     // Arrange 
     var fake = A.Fake<IBarservice>(); 
     var a = new Foo(fake); 

     // Act 
     a.DoStuff(1); 

     //Assert 
     A.CallTo(() => fake.DoOtherStuff(A<int>.That.Matches(x => x == 2))).MustHaveHappened(Repeated.Exactly.Once); 
    } 

    [Test] 
    public void TestTwo() 
    { 
     // Arrange 
     var fake = A.Fake<IBarservice>(); 
     var a = new Foo(fake); 

     // Act 
     a.DoStuff(1); 

     //Assert 
     A.CallTo(() => fake.DoOtherStuff(A<int>.That.Matches(x => x == 3))).MustHaveHappened(Repeated.Exactly.Once); 
    } 
} 

public class Foo 
{ 
    private readonly IBarservice _barservice; 

    public Foo(IBarservice barservice) 
    { 
     _barservice = barservice; 
    } 

    public void DoStuff(int someInt) 
    { 
     someInt++; 
     _barservice.DoOtherStuff(someInt); 
     // I should have increased someInt here again, but this is a bug that my tests catches 
     _barservice.DoOtherStuff(someInt); 
    } 
} 

public interface IBarservice 
{ 
    void DoOtherStuff(int someInt); 
} 

ответ

1

Markus, у меня был комментарий, который я отредактировал, так как я сделал ошибку.

Вы говорите, что вы получите только «Вызов не произошло» и

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

Я боюсь, что я не понимаю, что информация, которую вы надеялись, так как, когда я бегу TestOne, я получаю

FakeItEasy.ExpectationException 

    Assertion failed for the following call: 
    FakeItEasyQuestionsVS2015.IBarservice.DoOtherStuff(<x => (x == 2)>) 
    Expected to find it exactly once but found it #2 times among the calls: 
    1: FakeItEasyQuestionsVS2015.IBarservice.DoOtherStuff(someInt: 2) repeated 2 times 
    ... 

Это говорит о том, что вызов DoOtherStuff был сделан в два раза, с someInt переданном в качестве значение 2 каждый раз.

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