2009-10-30 5 views
3

Ive는 라이센스 파일을 사용하는 제품에서 작업하기 시작했습니다. 이러한 파일은 응용 프로그램이 작동하도록 읽기 (및 확인)해야합니다. 이로 인해 단위 테스트에서 몇 가지 문제가 발생하고 적절한 라이센스가 없으면 예외가 발생합니다.라이센스 파일이있는 단위 테스트 제품

우리는 NUnit과를 사용하고 내가 뭘해야 하나입니다됩니다 테스트를 실행하기 전에 그림자 복사 디렉토리에

  • 복사 라이센스 파일.
  • 임시 테스트 폴더에서 파일 이름이 유효하도록 작업 디렉터리를 원래 빌드 출력 폴더로 설정하십시오.

파일 액세스는 일반적으로 단위 테스트에서 피해야하지만 리팩토링이 시작되기 전에 필요한 경우 유닛 테스트가 필요하기 때문에 작동해야합니다.

답변

1

NUnit의 섀도 복사 기능을 사용하지 않으면 테스트가 빌드 된 것과 동일한 출력 폴더에서 테스트가 실행됩니다. 그러나 파일이 사용 중이므로 새 빌드도 차단됩니다. 나쁜 해결책, 그렇지만 솔루션은 그렇다.

0

귀하의 질문에 대한 대답은 필요하지 않지만 일반적으로 소프트웨어 제품에 대한 라이센스를 구입할 때 일반적으로 지원이 제공됩니다. 공급 업체에게 권장할만한 솔루션이 있는지 전화로 확인하는 것은 좋지 않을 수도 있습니다.

+2

그는 그가 제품의 소유자 인 것처럼 들리므로 잘 작동하는지 확신 할 수 없습니다. –

+0

도미니크 (Dominic)가 정확합니다. 저는 회사를 위해 응용 프로그램을 제작하고 있습니다. – Mizipzor

+0

왜 downvote? 그가 대답했을 때 그가 주인 이었음을 나타내는 질문에는 아무것도 없었습니다. – jconlin

1

나는 당신이 테스트를 너무 멀리 체인을 목표로하고 있다고 생각한다. 당신은 기능 테스트를 더 할 수있다. 하나의 담요 시험은 실제로는 좋은 방법이 아닙니다. 이 테스트를 수행하는 데 소요 된 시간과 목표로 지정된 작업 단위를 테스트하는 데 시간이 어떻게 소요되는지 균형을 잡으십시오.

+0

실제로 라이센스는 매우 낮은 수준에서 읽습니다. 라이센스 파일은 원하는 기능 만 "체리 쑤셔"지불 할 수있는 방식으로 작성됩니다. 라이센스를 필요로하지 않는 코드베이스의 부분은 이미 테스트를 거쳤지 만 아주 작은 부분입니다. – Mizipzor

1

라이센스 파일을 읽는 클래스를 바꾸기 위해 mock 클래스를 작성해야합니다. 이를 달성하기 위해 MOQ를 사용할 수 있습니다.

+0

일단 우리가 더 좋은 testsuite를 가지면 그것은 첫 번째 개선이 될 것입니다. 나는 리펙토링이 아무 것도 깨뜨리지 않았 음을 확신하고 싶다. 나는 내가하고 싶은 일을 단순히 할 수 없다는 것을 당신이 진술하고 있다고 가정합니다. – Mizipzor

+0

할 수 있는지 확실하지 않습니다. 나는 우리가 암시하고있는 것이 무엇인지 생각해 봅니다. 당신은 단 1 분의 1 미터의 시야를 가지고 있기 때문에 단위 테스트보다 연기 테스트를 더 많이 만들고 있습니다. 당신이 얻을 수있는 유일한 피드백은 깨 졌는지 아닌지입니다. 당신은 정보를 깰 어디 않았다. –

1

나는 당신이이 책을 읽고 시작하는 것이 좋습니다 :

Working Effectively with Legacy Code

그것은 당신에게 문제의 개방이 유형을 중단하는 방법에 대한 통찰력을 많이 줄 것이다. 그러한 코드를 테스트없이 생성 할 수 있도록 약간의 변경이있을 것이지만 가능한 한 작게 유지하고 매우 신중하게하십시오.

독서 라이선스를 위장한 주입 클래스가 너무 많이 뛰어 났기 때문에 라이선스 파일의 유효성을 검사하는 클래스를 변경하여 이라는 실제 유효 논리가 단일 메서드 이 시작되도록 할 수 있습니다. 클래스의 나머지 부분에 라이센스가 괜찮다고 알려주고 그 메소드를 가상으로 만든 다음, 메소드를 대체하는 서브 클래스로 테스트하여 파일의 유효성을 검증 한 것처럼 가장 할 수 있습니다.

그런 다음이 클래스와 관련된 몇 가지 테스트를 수행하면 올바르게 주입 된 클래스를 사용하여 메소드와 하위 클래스를 덤프 할 수 있습니다.

(유효성 검사가 복잡하다는 사실에 응답하여 편집 됨)

+0

유효성 검사 논리가 크고 복잡합니다. 당신이 제안한 것을하는 것조차도 큰 도약입니다. 한 파일 만 복사하려고합니다. 그것은 단순 할 것이라고 생각하는 큰 실수였습니다. – Mizipzor

+0

@mizipzor,하지만 당신은 하나의 방법으로 그 논리에 대한 호출을 시작할 수 있습니까? 그렇다면 코드의 나머지 부분이 그 이후로가는 것은 중요하지 않습니다. 테스트중인 동작을 피하기 위해이 단일 메서드를 재정의 할 수 있습니다. – Yishai