1

我正在尝试测试使用 DbContext 的存储库

我遇到的问题是 DbCONtext 想要为某些类型返回 DbSet

我什至不能模拟 IDbSet 因为它有一个 PRIVATE CTOR?!?!?!

每个人都如何克服这个问题?

4

1 回答 1

0

您需要使用适配器或包装器。DbContext 是第三方代码。你的代码应该把它隐藏在一个抽象后面,记住这只是一个关于你的系统内部如何工作的实现细节。您应该可以随时更改此设置。

public class ThatsHardToTest
{
    // Private constructors, slow start up time etc...

    public int AlwaysReturnOneExceptInSuperRareScnearios()
    {
        // Complex logic.
        return 1;
    }
}

现在如果我们想在上述方法出错时测试我们的代码,例如数据库系统离线。我不希望测试命中数据库,所以我们需要一个围绕这个第三方代码的适配器。我要么做一个接口,要么做一个基类。

public class MyTestAdapter : IExampleAdapter
{
    public int ReturnWhateverIWant()
    {
        return -1;
    }
}

我将用于MyTestAdapter对我的代码进行单元测试,因为我可以控制它的作用。对于生产代码,您只需将其替换为委托给实际生产系统的适配器即可。例如:

public class MyRealAdapter : IExampleAdapter
{
    public int ReturnWhateverIWant()
    {
        return new ThatsHardToTest().AlwaysReturnOneExceptInSuperRareScnearios();
    }
}
于 2013-02-17T14:21:00.930 回答