gpt4 book ai didi

c# - TDD - 想用一个假的存储库测试我的服务层,但是如何?

转载 作者:可可西里 更新时间:2023-11-01 08:03:22 24 4
gpt4 key购买 nike

我设计了一个使用存储库模式的应用程序,然后是一个单独的服务层,如下所示:



公共(public)类注册服务:IRegistrationService
{
公共(public)无效注册(用户用户)
{
IRepository<用户> userRepository = new UserRepository();
//添加用户等
}
}

如您所见,我在 Register 方法中实例化了我的存储库。现在我想编写一些单元测试,但我无法真正做到并用一个虚假的存储库替换它,可以吗?

虽然我不想将存储库添加为类变量(并通过构造函数设置它),因为我认为这会使我的代码“臭”(并非所有方法都需要所有存储库,而且我不需要调用层了解存储库等)。

建议?

最佳答案

你需要使用依赖注入(inject)。 UserRepository 是您的 RegistrationService 类的依赖项。为了使您的类正确地进行单元测试(即隔离它们的依赖项),您需要“反转”控制依赖项创建的内容。目前,您拥有直接控制权,并在内部创建它们。只需反转该控制,并允许外部的东西(例如像 CaSTLe Windsor 这样的 IoC 容器)注入(inject)它们:

public class RegistrationService: IRegistrationService
{
public RegistrationService(IRepository<User> userRepo)
{
m_userRepo = userRepo;
}

private IRepository<User> m_userRepo;

public void Register(User user)
{
// add user, etc with m_userRepo
}
}

我想我忘了补充。一旦允许注入(inject)依赖项,就打开了它们可模拟的可能性。由于您的 RegistrationService 现在将其依赖的用户存储库作为其构造函数的输入,您可以创建一个模拟存储库并将其传入,而不是实际的存储库。

关于c# - TDD - 想用一个假的存储库测试我的服务层,但是如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/935894/

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