我是否需要为服务类中只调用存储库类中的方法的方法编写单元测试?

Rob*_*nik 7 unit-testing mocking

我有一个存储库类(DAL):

public class MyRepository : IMyRepository
{
    public void Delete(int itemId)
    {
        // creates a concrete EF context class
        // deletes the object by calling context.DeleteObject()
    }

    // other methods
}
Run Code Online (Sandbox Code Playgroud)

我也有一个服务类(BLL):

public class MyService
{
    private IMyRepository localRepository;

    public MyService(IMyRepository instance)
    {
        this.localRepository = instance;
    }

    public void Delete(int itemId)
    {
        instance.Delete(itemId);
    }

    // other methods
}
Run Code Online (Sandbox Code Playgroud)

为MyRepository创建单元测试比实现它需要更多的时间,因为我必须模拟实体框架上下文.

但是为MyService创建单元测试似乎是无稽之谈,因为它只调用Repository.我可以检查的是验证它是否确实调用了存储库删除方法.

您如何建议对这些Delete方法进行单元测试.都?一?没有?你会测试什么?

Jos*_*eph 1

是的,我肯定会为服务层编写一个单元测试。这样做的原因是,您不仅要测试您的实现现在是否有效,还要测试它将来是否会继续有效。

这是一个需要理解的重要概念。如果后来有人更改了您的 ServiceLayer,并且没有单元测试,您如何验证该功能是否继续工作?

我还会为您的 DAL 编写测试,但我会将它们放在一个名为 DataTests 或其他东西的单独程序集中。此处的目的是跨程序集隔离您的关注点。单元测试确实不应该关心您的 DAL。