我在Asp.Net MVC项目中测试我的存储库,我需要为我的单元测试模拟一个DbContext。没有注入DbContext,我无法更改代码。
我检查了这个answer,我一步一步地跟着它,但它没有用。这是我的代码,我试图简化它:
[TestMethod]
public void SaveAmountsAfterCalculation()
{
// Faking the Context
var fakeContext = Isolate.Fake.NextInstance<MyContext>();
Isolate.WhenCalled(() => new MyContext()).WillReturn(fakeContext);
// Faking one the the DbSetList of the Context
Isolate.WhenCalled(() => fakeContext.SomeDbSet)
.WillReturnCollectionValuesOf(somehtingElseList);
// Calling the method to test
MyRepository.SaveAmountsAfterCalculation();
// Verifying if SomeProperty was called
Isolate.Verify.WasCalledWithAnyArguments(() => fakeContext
.SomeProperty.Attach(null));
}
在using语句中创建上下文时,不会抛出任何异常。
using (var ctx = new MyContext())
{
...
// The exception is thrown here.
if (ctx.SomeDbSet.Any(...))
...
}
但是如果我检查任何属性(DbSet),那么我可以看到这个错误:没有名为&#39; MyContext&#39;的连接字符串可以在应用程序配置文件中找到。。我已经在我的Test项目中添加了一个连接字符串,但它也没有工作。调用SomeDbSet
的那一刻,即使我告诉TypeMock用somethingElse
替换该方法的结果,也会抛出异常。请参阅上面的代码。
答案 0 :(得分:0)
看起来像"Isolate.WhenCalled(() => new MyContext()).WillReturn(fakeContext);
&#34;已经过时,可能会导致您的问题,因为您在使用 fakeNextInstance 时已经伪造了 "new MyContext()"
这一电话。