2009-09-29 8 views
5

제 코드에서는 가끔 다양한 바이트 배열 등이 전달됩니다. 또한 관리 대상이 될 수도 있습니다. 이러한 메모리 구조를 보존하여 구체적인 예에 ​​대한 테스트 사례를 작성할 수 있습니다.메모리 데이터 구조를 나중에 단위 테스트에서 사용하기 위해 보존하는 방법

내 표준 접근법은 중단 점을 맞추고 디버거를 사용하여 다양한 값을 찾은 다음 새 값으로 만들거나 단위 테스트 어셈블리에 파일 또는 무언가를 리소스로 포함시키는 것입니다. 때로는이 작업을 통해 구성 요소 상호 작용에 대한 내 자신의 추상화를 작성하여 코드를 new'ed 될 수있는 것에 의존하게 만듭니다.

더 쉬운 방법이 있습니까? 나는 이것이 새로운 무엇인가라고 상상할 수 없다. 당신이 소통하는 중앙 유닛이 화재라고 가정 해 봅시다. 단위 테스트를 위해 만들려는 데이터 그램을 만들기 위해 주변에서 놀고 있습니다. 또한 불 중앙이 합성 메시지를 작성하는 일부 문서화되지 않은 방법으로 인해 버그가 발생하면 해당 예제를 기록하고 보존하려고합니다.

이상적으로는 모든 상호 작용을 코드에 기록한 다음 다양한 재생 시나리오를 선택하고 선택할 수 있기를 바랍니다. 하지만 디버거에서 메모리에있는 다양한 데이터 그램 예제를 가져 와서 단위 테스트로 다시 가져 가면 많은 도움이됩니다.

제안 사항?

답변

4

binary serialization으로 시도해보십시오.

위의 내용은 정보를 저장 /로드하려는 부분 또는 외부 시스템과의 상호 작용을 테스트하는 데 사용하는 정보가 들어있는 일부 개체에 대한 것입니다. 테스트의 초점을 통합 테스트라고 부르는 것이 나머지 코드의 단위 테스트와 포커스 차이를 더 잘 포착하는 데 도움이됩니다.

시스템의 나머지 코드와 외부 시스템과의 특정 통합을 수행하는 코드를 분리하십시오. 시스템의 나머지 부분에 대한 단위 테스트를 생성 할 때 인터페이스를 뒤집어서/모의 할 수 있도록 제안합니다. 이 방법을 사용하면 외부 시스템에 영향을주지 않고 코드의 여러 측면/논리를 테스트 할 수있는 특수 제작 된 시나리오를 만들 수 있습니다. 즉, 초 단위로 많은 코드를 실행할 수도 있습니다.

+0

+1 나쁜 제안은 아니지만 해당 유형을 직렬화 할 수 있어야합니다. –

+0

@Mark y, 이는 그가 외부 시스템과 교환하는 요청/응답을 저장 /로드하는 데 필요한 부분에 더 많은 의미가 있습니다. 그래서 나는 단순한 사물들을 생각하고있다. 같은 접근법으로 나머지 테스트를 진행하는 것을 권장하지 않습니다. – eglasius

+0

실제로. 서비스 계층 내에서 통신 세부 사항을 명시하는 것을 허용하지 않을 것입니다. 통신 세부 정보를 처리하는 특정 비즈니스 엔티티 (클래스 라이브러리)가 있고 이것들이 테스트입니다. 통신과 비즈니스 로직 사이에는 추상 레이어가 있습니다. 고맙습니다. – Tormod

3

프레디 리오스 (Freddy Rios)는 자신의 대답에서 힌트를 얻으므로 메모리 테스트를 단위 테스트에서 다시 사용할 수 있도록 메모리 내 개체를 유지할 수있는 방법이 필요합니다. Memento design pattern은 좋은 출발점이며 직렬화는 구현의 기본 .NET 방식입니다.

그러면 쉽게 이러한 개체를 캡처하는 방법에 대한 질문이 남습니다. 시도 할 수있는 접근 방법은 다음과 같습니다.

요약 인터페이스 뒤에있는 사용자 자원과의 통신. 항상 좋은 디자인 결정입니다.

Decorator design pattern을 사용하면 해당 인터페이스의 실제 구현을 래핑 할 수 있습니다. 즉, 상호 작용을 단순히 기록 (직렬화)하는 Decorator를 만들 수 있지만 문제의 객체를 기록한 후에 모든 호출을 기본 구현에 위임합니다.

문제를 해결할 때 코드를 Memento Decorator에 연결하고 나중에 어디에서든 파일을 가져올 수 있습니다. 프로덕션 코드의 경우 Memento Decorator를 건너 뛰고 실제 구현을 직접 사용하면됩니다.당신은 정말 멋진 싶은 경우

, ...

이 기록 된 상호 작용을 모방 단위 테스트 코드를 방출하도록 당신도 기념물 실내 장식을 구현할 수 있지만, 이러한 노력의 공정한 금액을 필요로 할 가능성이 높다
+0

캡처 코드를 연결하는 방법에 대한 구체적인 해결 방법은 +1입니다. – eglasius

+0

데코레이터 아이디어에 약간의 장점이있을 수 있습니다. 비록 날씨가 좋을지 확신 할 수 없지만 데코레이터가 전달 된 얼룩을 재미있게 식별하는 데 필요한 지식에 액세스 할 수 있습니다. 그러나 원본 데이터 그램이 오류 메시지 페이로드의 일부로 손상되지 않았는지 확인하는 좋은 방법 일 수 있습니다. 구성을 통해 활성화/비활성화하는 것이 간단합니다. 고맙습니다. – Tormod

+0

@Tormod : 방울이 재미있는 것인지 아닌지에 대한 질문에 대해 당신이 맞습니다. 만료 정책에 따라 모든 것을 간단하게 기록한 다음 삭제하거나 기록할지 여부를 결정하기 위해 일종의 경험적 방법을 구현해야합니다. 환경에 대한 세부 사항을 알지 못하기 때문에 특별한 해결책이 없습니다. –

관련 문제