首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >测试接口存储库

测试接口存储库
EN

Stack Overflow用户
提问于 2010-01-20 03:57:26
回答 2查看 579关注 0票数 1

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

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

这是我的MemoryRepository的样子:

代码语言:javascript
复制
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();
    }
}

下面是我写的一些测试:

代码语言:javascript
复制
[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可以帮助我在界面中创建所需的所有功能,而不必与数据库对话?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-20 04:29:59

通常,存储库测试是集成测试,它们确实与数据库通信。正如您已经注意到的,使用假数据测试存储库没有什么意义。

它通常是被模拟来测试其他类的存储库。通过模拟除被测类之外的所有依赖项,您可以隔离正在测试的函数。声明存储库接口的好处是,它允许它们很容易地被模拟,并在其他代码的单元测试中使用。

票数 5
EN

Stack Overflow用户

发布于 2010-01-20 04:44:31

我注意到的一件事可能与您的问题无关,那就是repository的状态应该独立于所有其他运行的测试。在这种情况下,每个测试都会对相同的实例执行操作。

考虑一下在编写Delete_user测试时会发生什么。即使该测试在Get_All_Users之前运行,也没什么关系。我会在每次测试中创建一个新的MemoryRepositoryUser。这种测试气味可以存在于其他测试中,并不特定于您是否应该测试假货。

通常我会使用sub/mock而不是fake。正如Jamie所提到的,该接口允许您轻松地模拟您的依赖项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2096622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档