A difficult-to-test scenario are asynchronous processes. If a method-under-test has threading, getting the timing right for the testcase asserts is difficult. Typically, the method will return control to the test class prior to competing the logic that is being tested. The test class then immediately starts processing the asserts. These tests are flaky at best or completely broken at worst.