문제

나는 대 TDD 고 싶은 그것을 사용해 프로젝트,하지만 나는 확실하지 않은 방법 구조 내 수업을 이 새로운 패러다임이다.언어를 사용하고 싶은 Java 지만,문제의 정의 언어-특정합니다.

프로젝트

나의 몇 가지가 있는 하드웨어와 함께 ASCII-over-RS232 인터페이스입니다.I 을 발급할 수 있는 간단한 명령을 얻고,간단한 응답을 제어하는 경우에는 그들의 전면 패널에 있습니다.각각의 하나는 약간 다른 구문과 매우 다르 세트의 명령입니다.나의 목표는 추상화/인터페이스 그래서 나는 그들을 제어할 수 있습을 통해 모든 GUI 그리고/또는 원격 절차를 호출합니다.

문제

내가 믿는 첫 번째 단계를 만들어 추상 클래스(나가서 이름,는 방법에 대해'Communicator'?) 를 구현하는 모든 물건처럼 Serial I/O,다음 하위 클래스를 만들에 대한 각각의 장치입니다.나는 그것이 조금 더 복잡한 보다는,하지만 그 응용 프로그램의 핵심입니다.

지금에 대한 단위 테스트,나는 생각하지 않는 정말 필요한 실제 하드웨어 또는 직렬 연결합니다.내가 무엇을 하려고 하는 것은 손을 내 커뮤니케이 an InputStream 과 OutputStream(또는 독자 및 작가)할 수 있는 직렬 포트,파일,stdin/stdout,파이프에서 테스트 기능,무엇입니다.그래서,저는 그냥 커뮤니케이터 생성자를 그의 입력으로?그렇다면,그것은 쉬운 것을 넣어의 책임 설정 모두에서 테스트 프레임워크,그러나 진짜는 실제 연결?별도의 생성자?함수를 호출하면 생성자 again?별도의 클래스는 작업 그것은'연결'Communicator 정확한 I/O 스트림?

편집

나는에 대해 다시 작성하는 문제 부분을 얻기 위해서 질문에 답이라고 생각했었 요구지만,나는 그것을 알아 냈다.했던(올바르게?) 식별된 두 개의 서로 다른 기능 영역이 있습니다.

1)다루는 직렬 포트

2)통신 장치(이해 출력 및 생성 명령)

몇 달 전에,내가 결합된 그것은 모두 하나의 클래스가 있습니다.내가 먼저 생각하는 쪽으로 멀리 끊는에서 이었을 IO 스트림 등을 이해할 수 있는 장치,그리고 내가 알아낼 수 없는 것이 사람을 책임을 만들기 위한 스트림이 있습니다.

행하는 데 더 많은 연구에 반전의 제어,나 대답합니다.별도의 인터페이스 클래스는 문제를 해결하#1 고,그것의 생성자 class(es?) 는 문제를 해결하#2.는 방법으로,그것은 쉬운 모두를 테스트하는 따로 있습니다.#1 연결하여 실제 하드웨어와 하드웨어할 수 있는 테스트 프레임워크를 하는 것이 다릅니다.#2 할 수 있는 테스트는 주어진 모#1.

이 소리는 합리적인가?이 필요한가요 더 많은 정보를 공유?

도움이 되었습니까?

해결책

TDD와 함께해야합니다 당신의 디자인이 등장하게하십시오, 아기 계단으로 작게 시작하고 수업 테스트를 조금씩 테스트로 성장시킵니다.

명확한 : 구체적인 클래스로 시작하여 하나의 명령을 보내고, 모의 또는 스터브로 단위 테스트를합니다. 충분히 작동 할 때 (아마도 모든 옵션이 아님) 실제 장치에서 한 번 테스트하여 모의/스터브/시뮬레이터를 검증하십시오.

첫 번째 명령의 클래스가 작동하면 두 번째 명령을 동일한 방식으로 구현하기 시작하십시오. 먼저 모의/스텁을 다시 한 번 유효성 검사를 위해 장치에 대해 한 번. 이제 두 클래스 사이의 유사점을보고 있다면 추상 클래스 기반 디자인 또는 다른 것으로 리팩터를 리팩터링 할 수 있습니다.

다른 팁

죄송 되는 작은 리눅스 중심..

내가 좋아하는 방법을 시뮬레이션 기기를 작성자 장치 드라이버 시뮬레이션 하는 그들의 동작입니다.이것은 또한 당신이 재미를 제공 능력을 제공하는 것과 같 ioctl()인터페이스를 만드는 시뮬레이션된 비정상적으로 작동하는 장치.

에서는점..에서 테스트하는 현실 세계에만 문제는 장치(들)에 당신은 실제로 읽고 쓰기.

그것은 너무 열심히 일하지 않을 모방하는 행동의 기기..그것은 소리 같이 그들은 아주 기본적인 지침을 돌아와 아주 기본적인 응답을 합니다.다시 간단하 ioctl()말할 수 있는 시뮬레이션 장치의 시간들을 보장할 수 있는 코드를 처리한 이벤트를 못합니다.예를 들어,실패는 의도적으로 모든 n 번째 명령은 무작위로 선택한 통지를 ioctl().

편집을 본 후에는 정확히 올바른 방향으로 향하고 있다고 생각합니다. TDD는 잘 정의 된 책임이있는 소규모 클래스로 구성된 디자인으로 당신을 이끌어내는 경향이 있습니다. 또한 Tinkertim의 조언을 반향 할 것입니다. 다른 방식으로 행동하도록 제어하고 "도발"할 수있는 장치 시뮬레이터는 테스트에 매우 중요합니다.

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