2013-12-05 6 views
1

Как проверить, был ли Func вызван с использованием фреймворка FakeItEasy?Как проверить, вызван ли Func <T> с использованием фреймворка FakeItEasy?

Пример:

Func<bool> myFunc =() => true; 

// Unfortunately this fails: 
A.CallTo(myFunc.Invoke()).MustHaveHappened(); 
+0

Если FakeItEasy ничего, как и другие насмешливые рамки, то можно определить, только если свойство/метод на интерфейсе или виртуального метода на абстрактном классе называется, потому что вам придется издеваться этот объект. Вы не можете просто вызвать случайного делегата и проверить, что он был вызван. – Ben

ответ

3

Вы можете сделать это предполагая, что вы составляете Func к коду тестируемой. Вы просто делаете из него Fake, как и любой другой тип.
Это будет выглядеть примерно так.

public class Foo { 
    public bool Bar(Func<bool> fn) { 
    return fn(); 
    } 
} 

[Test] 
public void Should_call_fn() { 
    var fn = A.Fake<Func<bool>>(); 

    (new Foo()).Bar(fn); 

    A.CallTo(() => fn.Invoke()).MustHaveHappened(); 
} 
+0

Это прекрасно работает с FakeItEasy. – philippdolder

1

Я не»думаю, вы можете сделать это. Вы можете определить, вызывается ли Property/Method на интерфейсе или виртуальном методе абстрактного класса, потому что вам придется издеваться над этим объектом и перехватить вызовы метода. Вы не можете просто вызвать случайного делегата и проверить, что он был вызван.

Например, если у вас есть:

interface ISomething 
{ 
    void SomeMethod(); 
} 

, то вы можете сделать:

var fake = A.Fake<IContactSubmitter>(); 

// code which passes fake as dependency to something so SomeMethod will be caled... 

A.CallTo(() => fake.SomeMethod().MustHaveHappened(Repeated.Once.Exactly); 

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

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