gpt4 book ai didi

c# - 正确模拟通用方法

转载 作者:行者123 更新时间:2023-11-30 22:34:22 24 4
gpt4 key购买 nike

一般来说,Moq 和 Mocking 是新手。测试具有通用 RepositoryFactory 并使用其多个存储库的类。我应该这样初始化还是有更好的方法?

Mock<IRepositoryFactory> factory;
Mock<IRepository<User>> userRepository;
Mock<IRepository<Role>> roleRepository;
Mock<IRepository<Meeting>> meetingRepository;

[TestInitialize()]
public void MyTestInitialize()
{
meetingRepository = new Mock<IRepository<Meeting>>();
//some meeting setup

userRepository = new Mock<IRepository<User>>();
//some user setup

roleRepository = new Mock<IRepository<Role>>();
//some role setup

factory = new Mock<IRepositoryFactory>();
factory.Setup(f => f.CreateRepository<Meeting>()).Returns(meetingRepository.Object);
factory.Setup(f => f.CreateRepository<User>()).Returns(userRepository.Object);
factory.Setup(f => f.CreateRepository<Role>()).Returns(roleRepository.Object);

请注意,我可以有更多的 mcuh。

在这里,我在我的初始化方法中完成了所有操作,但我想我应该单独进行或同时进行。

最佳答案

我不知道有什么方法可以设置 f => f.CreateRepository<T>() ,考虑到每个 T 的存储库设置可能不同.除此之外,您可以使用功能规范(请参阅 blog post ),这会让事情变得更清晰。

对于您的示例,它看起来像这样:

var factory = Mock.Of<IRepositoryFactory>(
x =>
x.CreateRepository<Meeting>() == Mock.Of<IRepository<Meeting>>() &&
x.CreateRepository<Role>() == Mock.Of<IRepository<Role>>() &&
x.CreateRepository<User>() == Mock.Of<IRepository<User>>()
);

关于c# - 正确模拟通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7867921/

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