I'm trying to fake console output logging with TypeMock:
[Test]
public void Log_Error_LogsToStdErr()
{
var logger = SetupFakeLogger();
logger.Log( "text to log", true );
Isolate.Verify.WasCalledWithAnyArguments( () => logger.LogToFile( "" ) );
Isolate.Verify.WasCalledWithAnyArguments( () => Console.Error.WriteLine( "" ) );
}
private static WrapperLogger SetupFakeLogger()
{
Isolate.Fake.StaticMethods( typeof(Console), Members.ReturnRecursiveFakes );
Isolate.WhenCalled( () => Console.Error.WriteLine( "" ) ).IgnoreCall();
return Isolate.Fake.Instance<WrapperLogger>( Members.CallOriginal, ConstructorWillBe.Called, "dir", "file.log" );
}
However I'm getting the following exception on my second assert (call to Isolate.Verify for Console.Error.WriteLine):
TypeMock Verification: Method System.Environment.NewLine was expected but was not called
Is this some sort of a bug, or am I doing it incorrectly?
disclaimer i work at Typemock.
We don't support faking Console
, please see our supported fakeable mscorlib types.
You can use TextWriter
instead of Console and it will work.
See example:
[TestMethod]
public void Log_Error_LogsToStdErr()
{
var logger = SetupFakeLogger_Works();
logger.Log("text to log", true);
Isolate.Verify.WasCalledWithAnyArguments(() => logger.LogToFile(""));
//Isolate.Verify.WasCalledWithAnyArguments(() => Console.Error.WriteLine(""));
}
private static WrapperLogger SetupFakeLogger_Works()
{
var textWriter = Isolate.Fake.Instance<TextWriter>();
Console.SetOut(textWriter);
return Isolate.Fake.Instance<WrapperLogger>(Members.CallOriginal, ConstructorWillBe.Called, "dir", "file.log");
}