2011-04-12 3 views
1

Linq to SQL을 사용하는 클래스를 테스트하고 싶습니다. TypeMock Isolator로 datacontext를 가짜로 만들었지 만 datacontext에는 가짜 작성법을 모르는 기능이 있습니다. 이 함수는 Linq to Sql-queries에서 사용됩니다.TypeMock Isolator를 사용하여 datacontext 메소드를 가짜로 만드는 방법

이 함수는 두 개의 인수 (int? a, string b)를 전달하고 정수를 반환합니다. DC.MyMethod (int? a, string b)

어떻게 가짜겠습니까? 사람은 기본적으로

+0

"작동하지 않음"은 오류에 대한 설명이 아닙니다. 무슨 일 이니? –

+0

조롱하지 마십시오. 그것을 추상화하십시오 : http://bit.ly/gHLubu. – Steven

답변

3

연기를 도울 수

//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(...); 

희망을.

+0

답변 주셔서 감사합니다, 그러나 나는이 솔루션 NullReferenceException를 얻을. – hightow

+0

정확히 어디서? [email protected]으로 스택 트레이스를 보내 주시겠습니까? –

1

면책 조항, 나는 Typemock에서 일합니다.

예외를 방지 할 수있는 방법해야 가짜 MyDataContext 이후의 모든 instatnces :

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

그리고 다음의 MyFunction FO 동작() 설정 :

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); 
} 

우리 docs의 모든 정보를 참조하십시오.

관련 문제