Вместо того, чтобы просто проверять, завершен ли конкретный поток или нет, почему бы не создать фальшивку Foo
, которая будет вызываться вашей оболочкой, в которой функции записывают время, когда они фактически были запущены / завершены. Тогда ваш поток доходности должен ждать достаточно долго, чтобы можно было различить разницу между записанными временами. В своем тесте вы можете утверждать, что время запуска another_func
идет после времени запуска some_func
, а время его завершения - раньше времени завершения some_func
. Поскольку ваш фальшивый класс записывает только время, этого должно быть достаточно, чтобы гарантировать, что класс-обертка работает правильно.
EDIT : Вы, конечно, знаете, что ваш Foo
объект может быть анти-паттерном , а именно последовательной связью . В зависимости от того, что он делает, вы можете справиться с этим, просто заставив второй метод ничего не делать, если первый метод еще не был вызван. Используя пример из ссылки последовательной связи, это было бы похоже на то, что автомобиль ничего не делает, когда педаль акселератора нажата, если автомобиль еще не запущен. Если ничего не делать нецелесообразно, вы можете либо подождать и повторить попытку позже, инициировать «последовательность запуска» в текущем потоке, либо обработать ее как ошибку. Все эти вещи также могут быть реализованы вашей оболочкой, и, вероятно, их будет проще тестировать.
Вам также может понадобиться быть осторожным, чтобы один и тот же метод не вызывался дважды подряд, если требуется промежуточный вызов другого метода.