문제

나는 당신 이이 관용구에 익숙해야한다고 믿는다.

//In the "Resource Manager" class
public void process(Command cmd){
  //Initialize
  ExpensiveResource resource = new ExpensiveResource();
  //Use
  cmd.execute(resource);
  //Release / Close
  resource.close();
}

//In the Client class...
manager.process(new Command(){

  public void execute(ExpensiveResource res){
    //Do things with the resource
  }
});

나는이 관용구/패턴을 많이 사용했지만 최근에 나는 그것을 테스트하려고했다, 그리고 그것은 나에게 두통을주고있다 ...

ResourceManager와 클라이언트 클래스를 분리하여 어떻게 테스트합니까? 나는 이것이 꽉 조이는 것을 너무 많이 발견하여 쉽게 할 수 없다는 것을 알았습니다.

아이디어는 감사합니다.

문안 인사

도움이 되었습니까?

해결책

익명 유형을 테스트 할 수있는 실제 유형을 만들고 싶지 않은 경우 Execute () 함수의 코드를 테스트 할 수있는 다른 기능으로 이동하는 것이 좋습니다. 익명 유형은 겸손한 물체가됩니다 (http://xunitpatterns.com/humble%20object.html).

편집하다 그러나 익명 기능에서 코드를 테스트하는 방법을 계속 찾아야합니다.

C#과 같은 TypeSafe 언어에서는 익명 코드가 가상 멤버 함수를 호출하도록하여 수행 할 수 있습니다. 이 테스트는 가상 함수 호출을 재정의하여 클래스를 전문으로합니다.

JavaScript와 같은 비 형성 언어에서 호출되는 멤버 함수는 이미 가상입니다. 따라서 파생 유형을 만들지 않고 녹음 된 버전으로 호출 된 멤버 함수를 덮어 쓸 수 있습니다.

다른 팁

익명의 수업은 너무 작고 간단해야하므로 구조를 포함하여 구조를 테스트하는 것이 충분해야한다고 생각합니다.

테스트해야 할 필요성이 너무 복잡하고 크고 중요하다면 전체 수업으로 만듭니다.

익명의 내부 클래스를 많이 사용하지 마십시오 (전혀). 테스트하기가 어렵지만 복사 및 붙여 넣기없이 재사용하는 것은 사실상 불가능합니다.

대부분의 경우 전체 클래스를 만들면 더 많은 유연성을 제공하고 OO 디자인을 향상시킵니다 (더 많은 클래스 추가는 거의 항상 디자인을 향상시킵니다).

그건 그렇고, 당신이 언급했듯이, 폐쇄는 또한 동일한 문제가 있습니다-재사용에 대한 접근.

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