gpt4 book ai didi

c# - 测试接口(interface)存储库

转载 作者:太空宇宙 更新时间:2023-11-03 19:35:11 25 4
gpt4 key购买 nike

我想知道应该测试什么以及应该如何测试 IRepository。

目前我在我的域中创建了一个 MemoryRepository,我正在用假数据测试它。我不确定这是否正确。首先创建一些数据然后测试以查看存储库是否正确返回它感觉有点奇怪。

这是我的 MemoryRepository 的样子:

public class MemoryRepositoryUser : IRepositoryUser
{
List<User> fakeUsers;

public MemoryRepositoryUser(List<User> fakeUsers)
{
this.fakeUsers = fakeUsers;
}

public IEnumerable<User> GetAll()
{
return fakeUsers;
}

public User GetById(string id)
{
return GetAll().Where(u => u.Username == id).Single();
}
}

这些是我写的一些测试:

[TestFixture]
class TestMemoryRepositoryUser
{
private MemoryRepositoryUser repository;

public TestMemoryRepositoryUser(){
repository = new MemoryRepositoryUser(FakeData.GetFakeUsers());
}

[Test]
public void Get_All_Users()
{
var Users = repository.GetAll();
Assert.IsNotNull(Users);
Assert.IsInstanceOf(typeof(IEnumerable<User>), Users);
Assert.AreEqual(3, Users.Count());
}

[Test]
public void Get_User_By_ID()
{
var Username = "Bob";
var User = repository.GetById(Username);
Assert.IsNotNull(User);
Assert.AreEqual(Username, User.Username);
}
}

我对测试代码还很陌生,而且我对应该测试的内容大多有疑问。我想测试 MemoryRepository 可以帮助我在界面中创建我需要的所有功能,而无需与数据库对话?

最佳答案

通常存储库测试是集成测试,它们确实与数据库对话。正如您所注意到的,用虚假数据测试存储库毫无意义。

它通常是被模拟以测试其他类的存储库。通过模拟除被测类之外的每个依赖项,您可以隔离您正在测试的功能。为存储库声明接口(interface)的好处是它允许它们很容易被模拟并用于其他代码的单元测试。

关于c# - 测试接口(interface)存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2096622/

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