1

我想测试一个使用 Linq to SQL 的类。我已经用 TypeMock Isolator 伪造了 datacontext,但是 datacontext 还有一个我不知道如何伪造的功能。此函数用于 Linq to Sql 查询。

该函数传递两个参数(int?a,string 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).... ?

希望任何人都可以提供帮助

4

2 回答 2

3

隔离器默认忽略传递给函数的参数。要伪造你的,你可以简单地使用:

Isolate.WhenCalled(() => fakeDC.MyFunction(null, null)).WillReturn(...)

如果您需要确保使用特定参数调用它,请添加WithExactArguments(),如下所示:

int? id = 10;
string name = "David";

Isolate.WhenCalled(() => fakeDC.MyFunction(id, name)).WithExactArguments().WillReturn(...);

希望有帮助。

于 2011-04-12T07:23:22.413 回答
1

免责声明,我在 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);
 }

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

于 2016-03-01T08:42:52.983 回答