2010-01-10 71 views
4

我的周末项目包括编写跨平台并发基元库(关键部分,读/写互斥,互锁整数,事件等),并想知道如何对这些东西进行单元测试。我意识到测试并发代码本身很困难,但是测试代码的原始代码不会那么困难,可以吗?单元测试并发代码

原来,这很难。至少,对我来说是这样。

那么你如何去解决这个问题呢?举一个例子,我甚至不知道从哪里开始测试关键部分。

+4

你将在周末编写一个跨平台的并发原语库。令人印象深刻! – 2010-01-10 02:48:45

+0

哈哈这是目标!如果我不能做到这一点,总会有另一个需要填补的周末。不断学习是游戏的名称。 – 2010-01-10 02:57:15

回答

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

我如何测试我“不能”锁定,因为它只会旋转锁定,直到我可以锁定。 – 2010-01-10 16:07:40

+0

请看我在答案中提供的链接,特别是'Given_a_locked_MutexWrapper'类 – Cellfish 2010-01-11 07:16:44