public void DoWorkTest() { var wordReaderMock = new Mock<IWordReader>(); wordReaderMock.As<IEnumerable<string>>(); wordReaderMock.Setup(x => x.GetEnumerator()).Returns( new List<string> { "t1", "t2" }.GetEnumerator()); var wordWriteMock = new Mock<IWordWriter>(); var translatorMock = new Mock<ITranslator>(); ManualResetEvent mre; var translatorCreatorMock = new Mock<ITranslatorCreator>(); translatorCreatorMock.Setup(x => x.CreateTranslator( It.IsAny<ITranslationManager>(), It.IsAny<string>(), out mre)). Returns(translatorMock.Object); var translator = new TranslationManager( wordReaderMock.Object, wordWriteMock.Object, translatorCreatorMock.Object); translator.DoWork(); wordWriteMock.Verify(x => x.OnComplete(), Times.Once()); translatorMock.Verify(x => x.ThreadPoolCallback(It.IsAny<object>()), Times.Exactly(2)); wordReaderMock.VerifyAll(); wordWriteMock.VerifyAll(); translatorMock.VerifyAll(); translatorCreatorMock.VerifyAll(); }