2010-11-24 2 views
2

S # arp 아키텍처 프로젝트에서 상태를 테스트하려면 어떻게해야합니까?S # arp 아키텍처의 테스트 상태 - 모범 사례

예를 들어 사용자 정의 RoleProvider가 있습니다. provider.AddUsersToRoles (string [], string []) 메서드를 테스트하고 싶습니다.

// Arrange 
const string ficticiousRole = "Management"; 
var userToExpect = UserInstanceFactory.CreateValidTransientUser(); 
var roleToExpect = RoleInstanceFactory.CreateValidTransientRole(); 

userRepository.Expect(r => r.GetByUsername(userToExpect.Username)) 
       .Return(userToExpect); 
roleRepository.Expect(r => r.GetByName(ficticiousRole)) 
       .Return(roleToExpect); 

var userNames = new List<string>(); 
var roleNames = new List<string>(); 
userNames.Add(userToExpect.Username); 
roleNames.Add(ficticiousRole); 

그럼 내가 역할에 사용자를 추가 :

그래서 나는 시작한다. 그런 다음 사용자가이 역할에 속하는지 확인합니다.

// Act 
roleProvider.AddUsersToRoles(userNames.ToArray(), roleNames.ToArray()); 
var isNewUserInRole = roleProvider.IsUserInRole(userToExpect.Username, ficticiousRole); 

// Assert 
Assert.IsTrue(isNewUserInRole); 

문제는 내가 Rhino Mocks를 사용하고 있다는 것입니다. Rhino Mock에 대한 지식은 제한되어 있지만, Ayende Rahien에 따르면 Rhino Mock을 사용하여 상태가 아닌 작동 여부를 테스트합니다.

그래서 메모리 내 SqlLite db가 더 적합할까요? S # arp Arch에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

2

RhinoMocks는 데이터베이스 호출 등을 위조하는 단순한 조롱 프레임 워크이기 때문에 그렇게 할 수 없습니다. 기본적으로 데이터베이스 통합 테스트 인 데이터베이스에 대한 지속성을 실제로 테스트하려는 것처럼 들립니다. 이 경우 SQL Server 인스턴스를 사용하는 것과는 대조적으로 가능한 경우 SqlLite와 같은 메모리 내장 데이터베이스를 사용해야합니다.

각 테스트 또는 테스트 클래스의 시작 부분에 원하는 것은 이미 존재하는 경우 데이터베이스를 분리하고 데이터베이스를 다시 작성한 다음 일부 시드 데이터로 데이터베이스를 채운 다음 데이터베이스 상호 작용을 테스트하는 것입니다. 이렇게하면 각 테스트를 실행하기 전에 알려진 데이터베이스 상태를 유지할 수 있습니다.

내가 한 프로젝트에서 한 가지 일은 모든 읽기 전용 테스트를 하나의 테스트 클래스로 그룹화하여 데이터베이스에 대해 한 번만 클래스를 다시 작성해야하고 모든 삭제, 업데이트 및 삽입 테스트를 각 테스트 전에 데이터베이스를 다시 작성하는 다른 테스트 클래스. 충분한 테스트가 이루어지면 시간이 많이 걸릴 수 있으며 CI 서버로 강등 될 수 있습니다.

+0

그게 내가 크리스라고 생각한거야. 감사. 방금 S # 내에서 메모리 내 데이터베이스가 이미 설치되어 있다고 생각했습니다. – autonomatt

+0

Sharp에서 데이터베이스 작업을 테스트하는 방법을 설명하는 위키 항목을 찾았습니다. 기본적으로 테스트 클래스는 RepositoryTestBase에서 상속받습니다. 여기에 대한 자세한 정보 http://wiki.sharparchitecture.net/%28S%28qmzcoqrmp2gbmr45nfjqb1vo%29%29/Default.aspx?Page=Tutorial5RetriveResultsViaDao&AspxAutoDetectCookieSupport=1 – autonomatt

0

코드의 나머지 부분을 보지 않고서는 대답하기가 어려울 수 있습니다.

관련 문제