2010-01-10 7 views
4

내 주말 프로젝트는 크로스 플랫폼 동시성 프리미티브 라이브러리 (중요한 섹션, 뮤텍스 읽기/쓰기, 연동 된 정수, 이벤트 등)를 작성하는 것으로 구성되어 있으며이 유닛 테스트 방법을 궁금해하고있었습니다. 동시 코드를 테스트하는 것은 그 자체로 힘들다는 것을 알았지 만,이 코드의 프리미티브를 테스트하는 것은 그리 어렵지 않을 수 있습니다.단위 테스트 동시 코드

밝혀졌습니다. 적어도 나를 위해 그것이있다.

그러면 어떻게 접근할까요? 예를 들어, 중요한 부분 테스트를 시작할 위치를 알지도 못합니다.

+4

주말에 플랫폼 간 동시성 프리미티브 라이브러리를 작성하려고합니다. 인상적이다! –

+0

하하 그것이 목표입니다! 내가 그것을 만들 수 없으면 항상 채우기가 필요한 또 다른 주말이있을 것입니다. 지속적인 학습은 게임의 이름입니다. –

답변

6

단위 테스트에 대해 생각하지 말고 지정하려는 동작에 대해 생각해보십시오. 예를 들면 다음과 같습니다.

Given_an_unlocked_lock 
    It_should_be_possible_to_take_it 
Given_a_locked_locked 
    It_should_not_be_possible_to_take_it_from_another_thread 
    It_should_be_possible_take_it_from_the_same_thread 
Given_a_locked_locked_when_unlocked 
    It_should_be_possible_to_take_it 
Given_a_locked_locked_when_owning_thread_terminates 
    It_should_be_possible_to_take_it 

나는 무엇을 해야할지 식별하는데 도움이된다고 생각합니다. 그리고 네, 아마도 당신은 당신의 단위 테스트에 헬퍼 스레드가 필요합니다. 어쩌면 this example이 도움이 될 수 있습니다.

+0

내가 할 수있을 때까지는 스핀 록으로 고정 될 수 있기 때문에 "잠글 수 없음"을 어떻게 테스트 할 수 있습니까? –

+0

답변에서 제공 한 링크, 특히 클래스'Given_a_locked_MutexWrapper'를 보아라. – Cellfish