문제

GUI 객체의 단위 테스트를 용이하게하기 위해 중재자 패턴을 사용하고 있습니다.

psudo 코드 예 :

Class MyGuiClass
{
  //...  Declare and initialize mediator to be a MyMediator
  private void On_SomeButtonPressed()
  {
     mediator.SomeButtonWasPressed();
  }
}

Class MyMeditator
{
  public void On_SomeButtonPressed()
  {
     //.. Do something now that the button was pressed
  }

}

창을 만들지 않고도 일부 부트 턴을 누르면 발생하는 일이 발생할 수 있기 때문에 이것은 좋습니다.

저의 관심사는 내가 사적인 방법을 가져 와서 중재자가 전화를하는 사람이 공개 한 방법을 공개했다는 것입니다. 지난 시간에 나는 이것을했는데, 나는 공개해야 할 방법이 많지 않았기 때문에 나를 괴롭히지 않았다.

나는 현재이 패턴을 사용하기 위해 매우 큰 수업을 리팩토링하고 있으며, 누가 MyMediator를 만들 수 있는지 또는 어떤 클래스가 공개되는지에 대한 가시성을 제어 할 수 있는지 궁금합니다. (이것은 불가능하거나 필요하지 않을 수도 있지만, 나는 묻겠다고 생각했습니다.)

(.NET 3.5 SP1과 함께 C# 3.0을 사용하고 있습니다)

도움이 되었습니까?

해결책

요점은 클래스의 공개 인터페이스가 클래스의 공개 'API'를 보여주기를 원한다는 것입니다. 따라서 개인 방법을 공개적으로 만들 때 클래스를 더 혼란스럽고 '깨끗하게'만들고 있습니까?

당신이 할 수있는 몇 가지 일 : 1) 실제로 중재자 (또는 겸손한 대상) 클래스의 '공개 얼굴'이 무엇인지 생각하고 그 방법을 행복하게 공개하게 만듭니다. 조립품의 공개 얼굴의 일부가 아닌 조립 내에서만 사용 되더라도 중재자 클래스 자체가 공개적으로 선언되지 않았기 때문에 괜찮습니다. 따라서 공개 방법조차도 여전히 어셈블리 내부입니다.

2) 개인 용 내부를 사용하여 개인을 퍼지 할 수 있습니다 (테스트 클래스가 별도의 어셈블리에있는 경우 어셈블리의 InternalSvisIbleto 속성을 설정합니다).

3) '블랙 박스'접근 방식을 단위 테스트에 대한 접근 방식을 취하십시오. 원칙적으로 공개 방법에서 호출 할 때 사용을 통해 테스트를 받기 때문에 프라이버시를 테스트 할 필요가 없습니다.

다른 팁

나는 그것이 중요하지 않다고 생각합니다. 누가 GUI 이외의 중재자 인스턴스를 가지고 있습니까? 누군가가 그렇게한다면, 그것은 방법을 호출 할 것인가? 그렇다면 중요합니까? 버그를 알아 차리고 진단하고 수정하기가 어려울까요?

그래도 이벤트로 찾고있는 것을 달성 할 수 있다고 생각합니다.

예를 들어

/* in the gui class (view) */
public event EventHandler OnButtonClicked;

/* in the mediator */
public MyMediator(MyView view) 
{
    view.OnButtonClicked += HandleButtonClicked;
}

private void HandleButtonClicked(object sender, EventArgs e)
{

}

C#에 대해서는 확실하지 않지만 Java에서는 액세스 지정자를 생략하여 Java에서 패키지 레벨 액세스로 무언가를 선언 할 수 있습니다. 내가하는 일은 패키지 구조와 평행을 이루는 별도의 테스트 계층 구조를 만드는 것입니다. 따라서 클래스 com.abcmyClass를 테스트하려면 테스트 클래스 com.abcmyclasstest가있어서 MyClass의 패키지 액세스 방법에 합법적으로 액세스 할 수 있습니다.

나는 액세스 문제로 인해 모든 것을 공개한다는 아이디어를 좋아하지 않으며 인터페이스를 막기 때문에 클래스 Express의 공개 인터페이스를 좋아합니다. 무엇 그렇지 않습니다 어떻게 그것은 그것을하는데, 그것은 내가 개인이되는 것을 선호하는 방법을 노출 시키면 종종 내가 끝나는 곳입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top