인터페이스로 가짜 객체를 동적으로 생성해야합니다. 이 가짜 객체의 모든 메서드와 속성은 NotImplementedException을 throw해야합니다. .NET 리플렉션 API로만이를 수행하는 간단한 방법이 있습니까?인터페이스로 가짜 객체 만들기
답변
성 프록시 런타임에 인터페이스에 대한 프록시 객체를 생성하는 깔끔한 라이브러리입니다. 모든 주요 조롱 프레임 워크는 Castle Proxies를 사용합니다.
학습 곡선은 Moq과 같은 것을 사용하는 것보다 가파르다.하지만 Moq은 단위 테스트를 위해 특별히 설계되었으므로 사용자의 요구에 더 적합 할 수 있으므로 API가 ' 다시.
캐슬 프록시가 잘 작동하는 것 같습니다. 고마워. –
Moq과 같은 조롱 API를 사용할 수 있습니다. 단위 테스트를 조롱하기 위해 고안되었지만 필요한 것을해야합니다.
유일한 해결책은 Reflection.Emit을 사용하는 것입니다. 매우 간단하지는 않습니다. :) C# Reflection: Emitting classes to existing assemblies 또는 Reflection Emit을 참조하십시오.
Moq (다른 답변에서 제안한대로)는 Reflection.Emit를 사용하는 라이브러리이므로 더 간단한 해결책 일 수 있습니다! – bang
ImpromptuInterface이 도움이 될 수 있습니다. (홈페이지에서 복사)
샘플 코드는 다음과 같습니다
using ImpromptuInterface;
using ImpromptuInterface.Dynamic;
public interface IMyInterface{
string Prop1 { get; }
long Prop2 { get; }
Guid Prop3 { get; }
bool Meth1(int x);
}
//Anonymous Class
var anon = new {
Prop1 = "Test",
Prop2 = 42L,
Prop3 = Guid.NewGuid(),
Meth1 = Return<bool>.Arguments<int>(it => it > 5)
}
IMyInterface myInterface = anon.ActLike<IMyInterface>();
- 1. Ember.js에 가짜 "컨텍스트"만들기
- 2. 가짜 배열의 PHP 객체
- 3. 가짜 UDP 트래픽 만들기
- 4. 가짜 DbContext 만들기
- 5. 가짜 저장 장치 만들기
- 6. 같은 인터페이스로 다른 유형의 객체 전달하기
- 7. 문서 관리 시스템의 인터페이스로 가상 프린터 만들기
- 8. 자바 스크립트 테스트에서 가짜 날짜 객체
- 9. Crystal Report API에 전달할 "가짜"파일 만들기
- 10. 가짜 상태 표시 줄 정보 만들기
- 11. C# 또는 C++ - 가짜 초점 만들기?
- 12. 프로그래밍 방식으로 가짜 플래시 드라이브 만들기
- 13. cfWheels - 객체 관련 객체 만들기
- 14. 리플렉션을 통해 생성 될 때 인터페이스로 객체 캐스팅
- 15. 만들기 객체 참조
- 16. 번호 객체 만들기
- 17. getJSON 객체 만들기
- 18. IplImage에서 CvMat 객체 만들기
- 19. 문자열로 객체 만들기
- 20. 동적으로 MVC 객체 만들기
- 21. 임의의 객체 사전 만들기
- 22. 일반 클래스의 객체 만들기
- 23. "내구성있는"객체 만들기
- 24. OCaml에서 바로 객체 만들기
- 25. 객체 만들기, 이상한 질문
- 26. 리플렉션을 사용하여 객체 만들기
- 27. 서블릿에서 json 객체 만들기
- 28. 자바 객체 배열 만들기
- 29. 만들기 새로운 객체
- 30. buttonclick에 새 객체 만들기?
모의 라이브러리를 사용해야 할 것 같습니다. NotImplementedException 클래스를 사용해야하는 이유는 무엇입니까? 어쩌면 모의 (mock)를 사용하는 것보다 나은 해결책이있을 수 있습니다. – Archeg
나는 그 인터페이스를 구현하는 클래스를 포함하는 어셈블리로 가득 찬 인터페이스와 폴더가있는 하나의 어셈블리를 가지고 있습니다. 그래서 응용 프로그램을 시작할 때이 폴더를 스캔하여 Castle IoC 컨테이너에 구현 된 모든 인터페이스를 등록합니다. 하지만 일부 구현이 누락되어 있으므로 가짜 클래스를 생성해야합니다.이 클래스는 예외가 발생하여 런타임에 누락 된 부분이 있음을 알려줍니다. 정말 큰 응용 프로그램이므로 이러한 가짜 클래스를 수동으로 만들고 싶지 않습니다. –