测试接口存储库

Pic*_*els 1 c# testing tdd asp.net-mvc

我想知道我应该测试什么以及如何测试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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这些是我写的一些测试:

[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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*Ide 5

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

它通常是被嘲笑来测试其他类的存储库.通过模拟除被测试类之外的每个依赖项,您可以隔离正在测试的函数.声明存储库接口的好处是它允许在其他代码的单元测试中轻松模拟和使用它们.