캐슬 윈저는 단위 테스트에서 해결하는 동안 fakeiteasy 개체를 사용합니다.

수호 짓 무 케르 지

나는 FakeItEasy와 Castle Windsor 모두에서 매우 멍청한 데, 그것이 내가 검색 할 키워드를 모르기 때문에 Google 검색에서도 문제가있는 이유입니다.

이제 문제에 온다

수업이 있어요

public class PersonService : IPersonService
{
    IMarriageHelper objIMarriageHelper;
    IPersonRepository objIPersonRepository;
    public PersonService(IMarriageHelper objMarriageHelper, IPersonRepository objPersonRepository)
    {
        this.objIMarriageHelper = objMarriageHelper;
        this.objIPersonRepository = objPersonRepository;
    }

}

이제 Castle Windsor를 사용하여 단위 테스트 케이스에서 PersonService 클래스를 해결합니다.

        var objContainer = new WindsorContainer();
        objContainer.Register(Component.For<PersonService>());
        objContainer.Register(Component.For<IMarriageHelper>().ImplementedBy<MarriageHelper>());
        objContainer.Register(Component.For<IPersonRepository>().ImplementedBy<PersonRepository>());
        var objPersonService = objContainer.Resolve<PersonService>();

이제 문제는 PersonService를 해결하지만 MarraigeHelper가 아닌 PersonRepository의 가짜 객체를 보내고 싶다는 것입니다.

나는 이것에 매우 익숙하기 때문에 이걸로 나를 도울 수 있습니다.

올드 폭스

Castle Windsor에서 동일한 인터페이스에 여러 구성 요소를 등록하면 Windsor가 첫 번째 구성 요소 또는 Default ()로 표시된 구성 요소를 확인합니다.

문제를 해결하는 방법에는 여러 가지가 있습니다. 그중 몇 개만 지적하겠습니다.

이름을 사용한 등록 :

const string FAKE_REPOSITORY = "fake person repo";
var fakePersonRepository = A.Fake<IPersonRepository>();
objContainer.Register(Component.For<IPersonRepository>()
                               .Instance(fakePersonRepository)
                               .Named(FAKE_REPOSITORY));
const string PERSON_FOR_TEST = "person for test";
objContainer.Register(Component.For<PersonService>()
                               .DependsOn(Dependency.OnComponent(typeof(IPersonRepository), FAKE_REPOSITORY))
                               .Named(PERSON_FOR_TEST));

그리고이 사람 서비스 해결 :

var target = objContainer.Resolve<PersonService>(PERSON_FOR_TEST);

또 다른 옵션은 만드는 것입니다 PersonService의 DependsOn 동적 매개 변수를 사용하면 해결이 시나리오 PersonServicefakePersonRepository

var target = objContainer.Resolve<PersonService>(<key name>, fakePersonRepository)

3 ~ 4 개 이상의 옵션 (공장 방법, 이러한 방법 간의 조합 등)에 대해 생각할 수 있지만 PersonService테스트 를 위해 빌드하는 가장 좋은 방법 은 윈저 매직을 사용하지 않고 명시 적으로 빌드하거나 해결을 위해서만 윈저를 사용하는 것이라고 생각합니다. IMarriageHelper. 그러면 코드가 훨씬 더 읽기 쉽고 유지 관리가 쉽습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Google 단위 테스트를 사용하는 동안 C에서 fgets를 스텁하는 방법

분류에서Dev

단위 테스트 메서드를 호출하는 동안 단위 테스트 메서드 만 목록 상자에 표시되지 않습니다.

분류에서Dev

동일한 프로젝트에서 단위 테스트 프레임 워크 세트를 사용하는 것이 안전합니까?

분류에서Dev

.Net Core에서 BackgroundService를 단위 테스트하는 동안 어설 션 또는 확인할 사항

분류에서Dev

데스크탑을 전환 할 때 (전환을 위해 슬라이드 효과를 사용하는 동안) kde / kwin이 윈도우와 함께 데스크탑 배경을 슬라이드하도록하려면 어떻게해야합니까?

분류에서Dev

파생 개체를 사용하지 않는 단위 테스트

분류에서Dev

ShimContext.Create ()를 사용하는 단위 테스트에서 Azure DevOps Pipeline에서 오류가 발생합니다.

분류에서Dev

단위 테스트를 사용하는 동안 버전 번호와 충돌

분류에서Dev

캐슬 윈저는 특정 인터페이스를 구현하는 모든 구성 요소를 등록합니다.

분류에서Dev

해결 방법 : IllegalStateException :이 활동에 Theme.AppCompat 테마 (또는 하위 항목)를 사용해야합니다.

분류에서Dev

Qt 단위 테스트에서 많은 클래스를 테스트하기 위해 많은 슬롯 사용

분류에서Dev

테스트중인 시스템에서 사용되는 동일한 상수를 단위 테스트에서 사용하는 것이 좋은 생각입니까?

분류에서Dev

JavaScript는 테스트를 위해 다른 파일에서 사용자 지정 개체를 만듭니다.

분류에서Dev

Zend Framework 2를 단위 테스트하는 동안 GET 매개 변수를 전달할 수 없습니다.

분류에서Dev

개체를 MapEntry로 캐스팅하는 동안 ClassCastException이 발생했습니다.

분류에서Dev

다국어 쿼리의 Regex는 응용 프로그램에서 작동하지 않지만 SQL 개발자 및 단위 테스트에서 작동합니다.

분류에서Dev

Catel : Deserialize는 한 단위 테스트에서 작동하고 다른 테스트에서는 실패합니다.

분류에서Dev

C #에서 TextBox를 사용하는 동안 정수가 범위 내에 있는지 테스트하는 방법

분류에서Dev

grails 단위 테스트에서 VndErrorJsonRenderer를 사용하는 방법

분류에서Dev

한 동안 스위치에서 시도 캐치를 사용하는 방법

분류에서Dev

ConfigurationManager.GetSection (sectionName)은 단위 테스트를 수행하는 동안 null을 반환합니다.

분류에서Dev

동일한 유형으로 구현 된 다른 구성 요소를 등록 할 수없는 이유는 무엇입니까? (캐슬 윈저)

분류에서Dev

junit 5 단위 테스트에서 @Autowired에 대한 개체를 모의하는 방법은 무엇입니까?

분류에서Dev

PHP 단위 테스트 : 테스트 케이스를 실행하는 동안 모의 메서드가 트리거되지 않습니다.

분류에서Dev

내 ejabberd 서버에 연결하기 위해 안드로이드에서 smack 4.1.2를 사용하는 동안 SocketTimeoutException이 발생했습니다.

분류에서Dev

Racket에서 동적 출력이있는 함수에 대해 단위 테스트 프레임 워크를 사용하는 방법은 무엇입니까?

분류에서Dev

차트 js를 사용하는 동안 잡히지 않은 TypeError를 해결하기 위해 문제에 직면

분류에서Dev

BigQuery는 테이블로드를 위해 Google 시트에 연결할 때 잘못된 시트를 선택합니다. 로드하는 동안 사용할 다른 옵션은 무엇입니까?

분류에서Dev

typescript에서 새 개체를 만드는 동안 캐스팅하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Google 단위 테스트를 사용하는 동안 C에서 fgets를 스텁하는 방법

  2. 2

    단위 테스트 메서드를 호출하는 동안 단위 테스트 메서드 만 목록 상자에 표시되지 않습니다.

  3. 3

    동일한 프로젝트에서 단위 테스트 프레임 워크 세트를 사용하는 것이 안전합니까?

  4. 4

    .Net Core에서 BackgroundService를 단위 테스트하는 동안 어설 션 또는 확인할 사항

  5. 5

    데스크탑을 전환 할 때 (전환을 위해 슬라이드 효과를 사용하는 동안) kde / kwin이 윈도우와 함께 데스크탑 배경을 슬라이드하도록하려면 어떻게해야합니까?

  6. 6

    파생 개체를 사용하지 않는 단위 테스트

  7. 7

    ShimContext.Create ()를 사용하는 단위 테스트에서 Azure DevOps Pipeline에서 오류가 발생합니다.

  8. 8

    단위 테스트를 사용하는 동안 버전 번호와 충돌

  9. 9

    캐슬 윈저는 특정 인터페이스를 구현하는 모든 구성 요소를 등록합니다.

  10. 10

    해결 방법 : IllegalStateException :이 활동에 Theme.AppCompat 테마 (또는 하위 항목)를 사용해야합니다.

  11. 11

    Qt 단위 테스트에서 많은 클래스를 테스트하기 위해 많은 슬롯 사용

  12. 12

    테스트중인 시스템에서 사용되는 동일한 상수를 단위 테스트에서 사용하는 것이 좋은 생각입니까?

  13. 13

    JavaScript는 테스트를 위해 다른 파일에서 사용자 지정 개체를 만듭니다.

  14. 14

    Zend Framework 2를 단위 테스트하는 동안 GET 매개 변수를 전달할 수 없습니다.

  15. 15

    개체를 MapEntry로 캐스팅하는 동안 ClassCastException이 발생했습니다.

  16. 16

    다국어 쿼리의 Regex는 응용 프로그램에서 작동하지 않지만 SQL 개발자 및 단위 테스트에서 작동합니다.

  17. 17

    Catel : Deserialize는 한 단위 테스트에서 작동하고 다른 테스트에서는 실패합니다.

  18. 18

    C #에서 TextBox를 사용하는 동안 정수가 범위 내에 있는지 테스트하는 방법

  19. 19

    grails 단위 테스트에서 VndErrorJsonRenderer를 사용하는 방법

  20. 20

    한 동안 스위치에서 시도 캐치를 사용하는 방법

  21. 21

    ConfigurationManager.GetSection (sectionName)은 단위 테스트를 수행하는 동안 null을 반환합니다.

  22. 22

    동일한 유형으로 구현 된 다른 구성 요소를 등록 할 수없는 이유는 무엇입니까? (캐슬 윈저)

  23. 23

    junit 5 단위 테스트에서 @Autowired에 대한 개체를 모의하는 방법은 무엇입니까?

  24. 24

    PHP 단위 테스트 : 테스트 케이스를 실행하는 동안 모의 메서드가 트리거되지 않습니다.

  25. 25

    내 ejabberd 서버에 연결하기 위해 안드로이드에서 smack 4.1.2를 사용하는 동안 SocketTimeoutException이 발생했습니다.

  26. 26

    Racket에서 동적 출력이있는 함수에 대해 단위 테스트 프레임 워크를 사용하는 방법은 무엇입니까?

  27. 27

    차트 js를 사용하는 동안 잡히지 않은 TypeError를 해결하기 위해 문제에 직면

  28. 28

    BigQuery는 테이블로드를 위해 Google 시트에 연결할 때 잘못된 시트를 선택합니다. 로드하는 동안 사용할 다른 옵션은 무엇입니까?

  29. 29

    typescript에서 새 개체를 만드는 동안 캐스팅하는 방법은 무엇입니까?

뜨겁다태그

보관