def test_enters_pipeline(self, mocker, stage, method_name, fake_non_pipeline_thread): func = getattr(stage, method_name) args = [None for i in (range(get_arg_count(func) - 1))] # # We take a bit of a roundabout way to verify that the functuion enters the # pipeline executor: # # 1. we verify that the method got the pipeline executor # 2. we verify that the method invoked _something_ on the pipeline executor # # It's not perfect, but it's good enough. # # We do this because: # 1. We don't have the exact right args to run the method and we don't want # to add the complexity to get the right args in this test. # 2. We can't replace the wrapped method with a mock, AFAIK. # pipeline_executor = pipeline_thread._get_named_executor( "pipeline") mocker.patch.object(pipeline_executor, "submit") pipeline_executor.submit.side_effect = ThreadLaunchedError mocker.spy(pipeline_thread, "_get_named_executor") # If the method calls submit on some executor, it will raise a ThreadLaunchedError with pytest.raises(ThreadLaunchedError): func(*args) # now verify that the code got the pipeline executor and verify that it used that # executor to launch something. assert pipeline_thread._get_named_executor.call_count == 1 assert pipeline_thread._get_named_executor.call_args[0][ 0] == "pipeline" assert pipeline_executor.submit.call_count == 1
def test_asserts_in_pipeline(self, stage, method_name, fake_non_pipeline_thread): func = getattr(stage, method_name) args = [None for i in (range(get_arg_count(func) - 1))] with pytest.raises(AssertionError): func(*args)