C# 如何使用TypeMock来伪造datacontext方法

C# 如何使用TypeMock来伪造datacontext方法,c#,unit-testing,typemock,typemock-isolator,C#,Unit Testing,Typemock,Typemock Isolator,我想测试一个使用Linq到SQL的类。 我用TypeMock隔离器伪造了datacontext,但是datacontext还有一个我不知道如何伪造的函数。 此函数用于Linq到Sql查询 该函数传递两个参数(int?a、字符串b),并返回一个整数; MyMethod(int?a,字符串b) 我该怎么假装呢 //Fake datacontext var fakeDC = Isolate.Fake.Instance<MyDataContext>(); //Fake --> thi

我想测试一个使用Linq到SQL的类。 我用TypeMock隔离器伪造了datacontext,但是datacontext还有一个我不知道如何伪造的函数。 此函数用于Linq到Sql查询

该函数传递两个参数(int?a、字符串b),并返回一个整数; 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).... ?
//伪数据上下文
var fakeDC=Isolate.false.Instance();
//假-->这不起作用
隔离.WhenCalled((int?a,字符串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(...);

希望这会有所帮助。

默认情况下,隔离器会忽略传递给函数的参数。若要伪造您的参数,只需使用:

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>();
它确保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);
 }
内部类Foo
{
公共食物(
{
}
公共int-Bar()
{
var x=新的MyDataContext();
返回x.MyFunction(null,“5”);
}
}
公共类MyDataContext:DataContext
{
//
公共int MyFunction(int?a,字符串b)
{
如果(a==null)
{
抛出新异常();
}
返回0;
}
}
[测试方法,隔离]
public void TestMyDataContext()
{
//安排
var fakeDC=Isolate.false.AllInstances();
使用ExactArguments()隔离.WhenCalled(()=>fakeDC.MyFunction(null,“5”))。将返回(6);
//表演
var foo=new foo();
var res=foo.Bar();
//断言
主张平等(6,res);
}

请参阅我们的免责声明中的所有信息。

我在Typemock中工作

为了避免出现异常,您应该伪造MyDataContext的所有未来安装:

var fakeDC = Isolate.Fake.AllInstances<MyDataContext>();
它确保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);
 }
内部类Foo
{
公共食物(
{
}
公共int-Bar()
{
var x=新的MyDataContext();
返回x.MyFunction(null,“5”);
}
}
公共类MyDataContext:DataContext
{
//
公共int MyFunction(int?a,字符串b)
{
如果(a==null)
{
抛出新异常();
}
返回0;
}
}
[测试方法,隔离]
public void TestMyDataContext()
{
//安排
var fakeDC=Isolate.false.AllInstances();
使用ExactArguments()隔离.WhenCalled(()=>fakeDC.MyFunction(null,“5”))。将返回(6);
//表演
var foo=new foo();
var res=foo.Bar();
//断言
主张平等(6,res);
}

查看我们的中的所有信息。

“不工作”不是错误描述。发生了什么?不要模仿它。将其抽象为:“不工作”不是错误描述。发生了什么?不要模拟它。将其抽象掉:。感谢您的回答,但是我得到了此解决方案的NullReferenceException。具体位置在哪里?您介意将堆栈跟踪发送给我们吗support@typemock.com?谢谢你的回答,但是这个解决方案有一个NullReferenceException。具体在哪里?你会介意吗nd向我们发送堆栈跟踪到support@typemock.com?