【发布时间】:2010-09-28 12:53:18
【问题描述】:
我有一个不是线程安全的类:
class Foo {
/* Abstract base class, code which is not thread safe */
};
此外,如果你有 foo1 和 foo2 对象,你不能调用 foo1->someFunc() 直到 foo2->anotherFunc() 返回(这可能发生在两个线程上)。就是这种情况,无法更改(Foo 子类实际上是 python 脚本的包装器)。
为了防止不需要的电话,我创建了以下 -
class FooWrapper {
public:
FooWrapper(Foo* foo, FooWrappersMutex* mutex);
/* Wrapped functions from Foo */
};
在内部,FooWrapper 使用共享互斥体包装对 Foo 函数的调用。
我想测试 FooWrapper 的线程安全性。我最大的问题是线程由操作系统管理,这意味着我对其执行的控制较少。我想测试的是以下场景:
- 线程 1 调用 fooWrapper1->someFunc() 并在函数内部阻塞
- 线程 2 调用 fooWrapper2->anotherFunc() 并立即返回(因为 someFunc() 仍在执行中)
- 线程 1 完成执行
自动测试这种场景最简单的方法是什么?
我在 Win32 上使用 QT,尽管我更喜欢至少像 QT 那样跨平台的解决方案。
【问题讨论】:
标签: c++ multithreading unit-testing testing