如何使用TypeMock隔离器创建数据上下文方法
本文关键字:数据 上下文 方法 创建 何使用 TypeMock 隔离 | 更新日期: 2023-09-27 17:50:10
我想测试一个使用Linq to SQL的类。我已经用TypeMock Isolator伪造了数据上下文,但是数据上下文也有一个我不知道如何伪造的函数。此函数用于Linq to sql查询。
函数传递两个参数(int?A,字符串b),并返回一个整数;DC.MyMethod (int ?A、字符串b)
我该怎么做?
//Fake datacontext
var fakeDC = Isolate.Fake.Instance<MyDataContext>();
//Fake --> this doesn't work
Isolate.WhenCalled((int? a, string b) => fakeDC.MyFunction(a,b).... ?
希望有人能帮忙
隔离器默认忽略传递给函数的参数。你可以简单地使用:
Isolate.WhenCalled(() => fakeDC.MyFunction(null, null)).WillReturn(...)
如果您需要确保使用特定参数调用它,请添加WithExactArguments()
,如下所示:
int? id = 10;
string name = "David";
Isolate.WhenCalled(() => fakeDC.MyFunction(id, name)).WithExactArguments().WillReturn(...);
希望对你有帮助。
免责声明,我在Typemock工作。
为了避免异常,你应该设置MyDataContext的所有实例:
var fakeDC = Isolate.Fake.AllInstances<MyDataContext>();
然后设置MyFunction()的行为:
int? id = 10;
string name = "David";
Isolate.WhenCalled(() => fakeDC.MyFunction(id, name)).WithExactArguments().WillReturn(..);
它确保MyDataContext的所有实例将被伪造(由new MyDataContext()在程序的任何部分创建),并且MyFunction()行为也将被伪造。
由于我不知道所有的细节,请查看下面的示例以获得更多的理解:
internal class Foo
{
public Foo()
{
}
public int Bar()
{
var x = new MyDataContext();
return x.MyFunction(null, "5");
}
}
public class MyDataContext : DataContext
{
//
public int MyFunction(int? a, string b)
{
if(a == null)
{
throw new Exception();
}
return 0;
}
}
[TestMethod, Isolated]
public void TestMyDataContext()
{
//Arrange
var fakeDC = Isolate.Fake.AllInstances<MyDataContext>();
Isolate.WhenCalled(() => fakeDC.MyFunction(null, "5")).WithExactArguments().WillReturn(6);
//Act
var foo = new Foo();
var res = foo.Bar();
//Assert
Assert.AreEqual(6, res);
}