2009-02-09 4 views
3

Moq 및 단위 테스트에 참여하고 있으므로이 점이 확실한 경우 용서해주십시오 (빠른 검색을 통해 나에게 이와 같은 내용이 표시되지 않았습니다) .Moq 및 Linq-to-SQL에 대한 CRUD 단위 테스트 작성 방법

void AddFeed(Feed feed); 

나는이 기능에 대한 단위 테스트를 작성하고 싶다고 :

나는 다음과 같은 제안 회원과 인터페이스를 가지고있다. 테스트 클래스는 다음과 같이 MOQ 저장소 선언이 있습니다

모의 저장소 선언이 원하는 새로운 동작을 포함하도록 수정해야하거나 내가 다른 MOQ를 만들어야합니다 (그 수행 될 얼마나) 어떻게
static IFeedRepository MockFeedsRepository(params Feed[] feeds) 
    { 
     var mockFeedsRepository = new Moq.Mock<IFeedRepository>(); 
     mockFeedsRepository.Expect(x => x.Feeds).Returns((feeds.AsQueryable)); 

     return mockFeedsRepository.Object; 
    } 

.

가짜를 만든 후에 단위 테스트를 유도하는 것이 훨씬 쉽지만 힌트를 크게 얻게됩니다.

많은 감사, 인 (나는 또한이

Feed myNewFeed = new Feed(); 
feedRepository.Add(myNewFeed); 

처럼 AddFeed 방법을 사용하는 것이 있으리라 믿고있어

답변

9

하고이 같은를 사용하지 않을 것을

KevDog 열악한 디자인)

IFeedRepository feedRepository = new FeedRepository(); 
Feed myNewFeed = new Feed(feedRepository); 
... 
myNewFeed.Save(); 

나는 당신이 시험을 원한다고 생각할 것입니다.

[Test] 
public void TheTest() 
{ 
    IFeedRepository repository = MockFeedsRepository({feed1, feed2, feed3}); 
    Feed newFeed = new Feed(); 
    repository.Add(newFeed); 
    Assert.AreEqual(4,repository.Count()); 
} 

그런 경우 테스트는 실제로 모의 메모리 저장소의 구현 이외의 다른 것을 테스트하지 않습니다. 그게 당신이 정말로해야 할 일입니까?

내가하고 싶은 것은 대신 저장소의 L2Sql 구현을 테스트하거나 클래스가 IFeedRepository 인터페이스와 상호 작용하는 방식을 테스트하는 것입니다.

그리고 당신은 다음 IFeedRepository 인터페이스의 사용을 테스트하려는 경우 단지

메소드가 호출 된 경우 주장에 대한 도움말을
[Test] 
public void TheTest() 
{ 
     IFeedRepository repository = Moq.Mock<IFeedRepository>(); 
     Feed newFeed = new Feed(); 
     repository.Expect(r => r.Add(newFeed)); //no return as it's a void method 
     //repository.Expect(r => r.Add(newFeed)).Throws(new ApplicationException()); --Test handing of exceptions 

     //Code to hit the .Add() method 

     //Assert the Add method was called. 
} 

같은 간단한 일을 할, 즉

도움이 나는 희망 Using Moq to determine if a method is called

참조

+0

AddFeed 메서드를 사용하는 방법에 대한 가정은 정확합니다. 나는 당신이 제안한 것처럼, Linq-to-SQL 부분에 대한 테스트를 작성하게되었고, 잘못된 부분을 테스트하고있는 것 같았습니다. 내 혼란을 해결해 주셔서 감사합니다. – KevDog