2016-02-22 1 views
1

Используя FakeItEasy, у меня есть настройка, аналогичная приведенной ниже в одном из моих тестов, а утверждение CallTo внизу внизу не работает при настройке.Ограничение аргумента FakeItEasy оценивается как null за пределами lambda

var fakedTool = A.Fake<ITool>(); 

var concreteUnderTest = new Concrete(fakedTool); 

concreteUnderTest.doSomething(); 

var fooConstraint = A<Foo>.That.Matches(f => f.Name.Equals('Alice')); 
var barConstraint = A<Bar>.Ignored; 

A.CallTo(() => fakedTool.ObservedFunction(fooConstraint , barConstraint)) 
    .MustHaveHappened(Repeated.Exactly.Once); 

Я поместил контрольную точку непосредственно над CallTo линией, а значения fooConstraint и barConstraint оба равны null.

Когда я установил утверждение вверх, как это, однако, она проходит:

A.CallTo(() => 
    fakedTool.ObservedFunction(
     A<Foo>.That.Matches(f => f.Name.Equals('Alice')), 
     A<Bar>.Ignored 
    ) 
).MustHaveHappened(Repeated.Exactly.Once); 

Что вызывает такое поведение? Это предназначено?

ответ

1

Это предназначенное поведение. Вы можете посмотреть раздел Always place Ignored and That inside A.CallTo в документах.

От FakeItEasy 2.0.0, FakeItEasy will throw an exception when they're stored as variables and invoked, вместо того, чтобы терпеть неудачу, будучи нулевым.

+0

Вы также можете принять ответ, чтобы сообщить читателям, что это правильно. –

+0

@BlairConrad SO предотвращает принятие вашего собственного ответа в течение 2 дней - я соглашусь тогда :) –

+1

Ah. Я не знал. Извините за беспокойство. –

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