【发布时间】:2020-01-13 21:23:42
【问题描述】:
我正在使用 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() 语句吗?
【问题讨论】:
-
很容易,我会说...? :) (好的,好的,我会读一读...)
-
您确定您提供的代码甚至可以编译吗?
ClassUnderTest没有无参数构造函数(我假设它是一个类 - 但代码中也缺少它),但您似乎使用了一个...... -
@decPL:你说得对,我更正了上面的示例。 foo-fake 在 costructor 中传递。
-
和
dataAccess是...? -
我认为@decPL 正在做某事——这就是我检查
Execute是否被调用的方式,但我也认为除了所有编译错误(持续存在)之外还有其他事情发生-ClassUnderTest没有“类”,如果没有别的)。 FakeItEasy 抱怨foo是一个“严格的假货”,这不是默认值。是否有您未显示的其他代码?或者可能是某个地方的IFakeConfigurator?
标签: c# unit-testing mocking action fakeiteasy