作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用一些抽象方法创建了一个抽象基类:
public abstract class MyBaseClass<T> where T: class, IEntity
{
public T Load(long id)
{
//if in cache continue with cached value
//else make use of protected abstract LoadFromContext
}
protected abstract T LoadFromContext(long id);
}
现在我想检查我们是否调用了 LoadFromContext 但出现错误:System.ArgumentException: Member FakeCacheRepository.LoadFromContext does not exist
Unittest Moq 设置,其中 FakeCacheRepository 是 MyBaseClass 的派生类型:
Mock<FakeCacheRepository> personRepoMock = new Mock<FakeCacheRepository>();
personRepoMock.Setup(x => x.Load(14)).Returns(new Person() { ID = 14, Name = "Developer14" });
personRepoMock.Protected().Setup("LoadFromContext");
var person = new FakeCacheRepository().Load(14);
Assert.AreEqual("Developer14", person.Name);
personRepoMock.Protected().Verify("LoadFromContext", Times.Once());
我做错了什么,是否有任何关于最小起订量的好教程可以更好地理解,而无需谷歌每个单独的问题。
最佳答案
除了 TomDoesCode 已经说过的:
要按照您的方式使用 Protected()
,您必须使用通用版本,因为 LoadFromContext
返回一个值(Person
).此外,您还必须传递参数:
personRepoMock.Protected().Setup<Person>("LoadFromContext", 14L);
同样,您的Verify
必须看起来像
personRepoMock.Protected().Verify<Person>("LoadFromContext", Times.Once(), 14L);
但即使您更改它,您的测试也不会成功。您创建了 FakeCacheRepository
的模拟,但随后在 FakeCacheRepository
的新实例上调用了 Load(14)
,而不是在模拟上。
您应该退后一步,想想您到底想测试什么。如果您想测试 FakeCacheRepository
是否从 Load
调用了 LoadFromContext
,那么 moq 不是完成这项工作的正确工具。
关于c# - 使用最小起订量验证是否调用了抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33231813/
我是一名优秀的程序员,十分优秀!