3

이것은 엔티티와 함께 ​​작동하고 db에 저장 한 다음 단위 테스트를 작성할 수 없기 때문에 문제를 일으키는 샘플 함수입니다. 확인해보십시오 :RIA 서비스 DB에 레코드를 삽입하는 함수를 단위 테스트하는 방법은 무엇입니까?

// this class exists in a Silverlight Class Library 
public class EmployeeSaver 
{ 
    .... 

    public void Go() 
    { 
     Employee e = new Employee(); 

     e.Name="Jeremiah"; 

     ... // Other stuff that really needs to be tested 

     _DataContext.Employees.Add(e); 
     _DataContext.SubmitChanges(); 

    } 
} 

RIA 서비스의 특성상 DomainService는 Silverlight Unit Testing 프레임 워크에서 실행되지 않습니다. 이것은 내가 단위 테스트를 할 때 RIA에 접근 할 수 없다는 것을 의미합니다.

우리는 모의 데이터베이스에 대해 생각해 봤지만 실제로이 클래스는 DB에 추가 할 엔터티 (Employee)를 만듭니다. 이것은 Mock Databases가이 엔티티를 사용하지 않고 원래 엔티티와 비슷한 MockEntity 클래스를 사용하기 때문에 문제가됩니다.

우리는 RIA 자체를 테스트하는 것이 아니라 RIA가 생성 한 엔티티를 사용하는 방법을 알고 있습니다.

[TestMethod] 
public void Test() 
{ 
    EmployeeSaver s = new EmployeeSaver(); 
    s.Go(); 

    Assert.IsEqual(DataContext.Employees.Last().Name, "Jeremiah"); 
} 

어떻게이 기능을 테스트 할 수 있습니다

내 최종 목표는이 유사한 함수를 작성하는 것? 어떤 테스트 프레임 워크를 사용해야합니까? Silverlight Testing Framework를 사용하고 있습니다.

+0

터프 하나 ...... ( –

+0

여러 계층을 테스트하는 것은 결코 쉬운 일이 아닙니다 ... 모의 테스트, 별도 테스트 또는 다시 고려할 것인가? –

답변

2

유닛 테스트에서, instance는 _DataContext의 스텁 아웃 구현을 가져야하며, Go 메소드가 호출되고 _DataContext.Employees를 호출한다. (예) 추가; _DataContext.SubmitChanges(); 그것은 당신의 그루터기에 호출 스텁은 다음 직원이 추가되었다 변화가 제출 된 사실을 기록해야

를 호출 한 후에는 SHO 이동합니다.. uld는 스텁을 쿼리하여 새 직원이 추가되었는지 확인하고 SubmitChanges를 호출합니다.

보조 노트로 : Go가 _DataContext의 다양한 메소드를 호출할지 여부를 신경 써서는 안된다는 점에서 다른 답변의 마지막 부분에 실제로 동의하지 않습니다. 여기에 _DataContext 메소드를 테스트하는 것에 관심이 없지만 Go의 유닛 테스트는 Go 메소드가 _DataContext 메소드를 올바르게 호출하는지 확인해야합니다. Go 메서드의 모든 행을 테스트 할 수 있어야한다는 이론적 근거가 있습니다. 이 확인 작업을 수행하지 않은 경우 _DataContext 메서드에 대한 호출을 제거하여 코드를 손상시킬 수는 있지만 유닛 테스트는이를 catch하지 않습니다. 이것은 Bob Martin의 "TDD의 3 가지 원칙"원칙을 깨뜨릴 것입니다.

1

모의 데이타베이스는 당신의 객체를 그대로 저장할 수 있습니다. 우리는 리포지토리가 사전에 저장되는 시스템을 사용합니다.

당신은 그렇게까지 갈 필요조차 없습니다. RhinoMocks와 같은 무언가로 _DataContext에 대한 모의 인터페이스를 사용하여 호출 될 것으로 예상되는 메소드가 _DataContext.SubmitChanges()가 작동하는이 테스트에 관심이 없다는 것을 확인하십시오.) 당신은 오직 객체를 설정하고 save를 호출하는 것에주의를 기울인다.

관련 문제