2012-11-13 4 views
1

전원 정보를 읽는 클래스를 단위 테스트하고 싶습니다. System.Windows.SystemInformation.PowerStatus에서 값을 할당하는 개인 읽기 전용 변수가 있는데이 문제를 변경하기 위해 리플렉션을 사용할 수 있지만 ...내가 상속받을 수없는 클래스의 속성을 재정의 할 수 있습니까?

System.Windows.PowerStatus에는 public 생성자가없고 테스트에서 사용할 수있는 testPowerStatus 클래스를 파생시키기 위해이 클래스를 상속하지 않습니다.

BatteryLifePercent 및 BatteryLifeRemaining 속성에 대한 getter를 재정의 할 수 있기 때문에 특정 값일 때 올바른 동작이 발생하는지 테스트 할 수 있습니다.

어쨌든 내가 할 수 있습니까? 아니면 불가능한가요?

+2

참조 http://stackoverflow.com/questions/6484/how-do-you-mock-a-sealed-class –

+1

너무 작곡 디자인 패턴을보세요 http://en.wikipedia.org/wiki/Composite_pattern – series0ne

+0

답장을 보내 주셔서 감사합니다. 나는 봉인 된 클래스에 대한 래퍼를 만들고있다. 감사! – jtwigg

답변

1

이렇게하는 "올바른 방법은 추상화 계층을 만드는 것입니다. IPowerInfoProvider 인터페이스를 작성한 다음 테스트 용 인터페이스를 구현하는 스텁을 작성하고 실제 전원 정보를 제공하는 또 다른 구현을 작성해야합니다.

BL은 IPowerInfoProvider 인터페이스에 대해서만 알고 있어야합니다.

+0

인터페이스를 작성한 다음 인터페이스를 작성한 클래스를 작성하여 모의 정보를 리턴하는 클래스 및 시스템 정보를 리턴합니다. 고마워요 – jtwigg

+0

@jtwigg 환영합니다! 답으로 표시해 주셔서 감사합니다! =) – LMB

1

필자는 필요한 속성과 메서드를 갖는 인터페이스 IPowerStatus를 만들고 싶습니다. 내가 IPowerStatus를 구현하고 메소드와 getter/setter를 keeped 객체에 구현하는 System.Windows.PowerStatus에 대한 래퍼 클래스를 만들 것입니다. 그리고 단위 테스트를 위해 IPowerStatus를 구현하는 모의 작업을 사용할 수 있습니다.

2

실제로 System.Windows.SystemInformation.PowerStatus의 값을 개인 변수에 할당하는 루틴을 테스트 할 필요가 없으며 별도의 루틴에서 테스트 할 논리를 추출하려고 시도합니다 (예 : a 메서드가있는 메서드). number는 relivant 정보를 시뮬레이트하는 매개 변수입니다.

PowerStatus 노출을 살펴보십시오. 모두 int, float 또는 enum입니다.이 값을 단위에 매개 변수로 제공하면 쉽게 테스트 할 수 있습니다.

관련 문제