Как подделать метод datacontext с TypeMock Isolator - PullRequest
1 голос
/ 12 апреля 2011

Я хочу протестировать класс, который использует 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).... ?

Надеюсь, что кто-нибудь может помочь

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

Isolator по умолчанию игнорирует аргументы, переданные функциям. Чтобы подделать свою, вы можете просто использовать:

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

Если вам нужно убедиться, что он вызывался с конкретными аргументами, добавьте WithExactArguments(), например:

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

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

Надеюсь, это поможет.

1 голос
/ 01 марта 2016

Отказ от ответственности, я работаю в Typemock.

Чтобы избежать исключений, вы должны подделать все будущие экземпляры MyDataContext:

var fakeDC = Isolate.Fake.AllInstances<MyDataContext>();

И затем установить поведение для MyFunction ():

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

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

Это гарантирует, что все экземпляры MyDataContext будут поддельными (созданными новым 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);
 }

См. Всю информацию в наших документах .

...