gpt4 book ai didi

c# - 使用最小起订量验证是否调用了抽象方法

转载 作者:行者123 更新时间:2023-11-30 19:56:40 26 4
gpt4 key购买 nike

我用一些抽象方法创建了一个抽象基类:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com