Я работаю с библиотекой FakeItEasy, чтобы создавать подделки для моих модульных тестов.Как подделать действие <> с FakeItEasy
У меня есть ClassUnderTest
, на котором я хочу протестировать метод MethodToTest(Data dataObject)
. Этот метод вызова метода интерфейса, который я хочу подделать:
public interface IFoo
{
void Execute(Action<IDataAccess> action);
}
public class ClassUnderTest
{
private IFoo _foo;
public ClassUnderTest(IFoo foo)
{
_foo = foo;
}
public void MethodToTest(Data dataObject)
{
_foo.Execute(dataAccess => dataAccess.Update(dataObject));
}
}
public interface IDataAccess
{
void Update(Data data);
}
public class Data
{
public int Property { get; set; }
}
В моих модульных тестов я хочу проверить, если метод испытаний требует интерфейс правильно (с правильным значением свойства):
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var foo = A.Fake<IFoo>(x => x.Strict());
A.CallTo(() => foo.Execute(dataAccess => dataAccess.Update(A<Data>.That.Matches(d => d.Property == 20))));
var cut = new ClassUnderTest(foo);
cut.MethodToTest(new Data { Property = 20 });
}
}
Но в этом тесте что-то не так. Я получаю исключение:
Метод испытания TestProject1.UnitTest1.TestMethod1 бросил исключение: FakeItEasy.ExpectationException: Вызов к не настроен метод «Execute» строгой подделки.
Есть ли у кого-нибудь представление о том, как мне нужно правильно настроить оператор CallTo()
?
Заранее благодарен!
Легко, я бы сказал ...? :) (хорошо, хорошо, я дам это прочитать ...) – Noctis
Вы уверены, что код, который вы представили, даже компилируется? 'ClassUnderTest' не имеет конструктора без параметров (я предполагаю, что это класс, но это также отсутствует в коде), но вы, кажется, используете один ... – decPL
@ decPL: вы правы, я исправил образец выше , foo-fake передается в costructor. – rhe1980