TestContext
Provide the context information of the current test.
This is an adapter for the internal ExecutionContext
class, hiding the internals from the user test.
using NUnit.Framework.Interfaces;
using NUnit.Framework.Internal;
using System;
using System.IO;
namespace NUnit.Framework
{
public class TestContext
{
public class TestAdapter
{
private readonly Test _test;
public string ID => _test.Id;
public string Name => _test.Name;
public string MethodName {
get {
if (!(_test is TestMethod))
return null;
return _test.Method.Name;
}
}
public string FullName => _test.FullName;
public string ClassName => _test.ClassName;
public IPropertyBag Properties => _test.Properties;
public TestAdapter(Test test)
{
_test = test;
}
}
public class ResultAdapter
{
private readonly TestResult _result;
public ResultState Outcome => _result.ResultState;
public string Message => _result.Message;
public virtual string StackTrace => _result.StackTrace;
public int FailCount => _result.FailCount;
public int PassCount => _result.PassCount;
public int SkipCount => _result.SkipCount;
public int InconclusiveCount => _result.InconclusiveCount;
public ResultAdapter(TestResult result)
{
_result = result;
}
}
private readonly TestExecutionContext _testExecutionContext;
private TestAdapter _test;
private ResultAdapter _result;
public static TestContext CurrentContext => new TestContext(TestExecutionContext.CurrentContext);
public static TextWriter Out => TestExecutionContext.CurrentContext.OutWriter;
public TestAdapter Test => _test ?? (_test = new TestAdapter(_testExecutionContext.CurrentTest));
public ResultAdapter Result => _result ?? (_result = new ResultAdapter(_testExecutionContext.CurrentResult));
public string TestDirectory => AssemblyHelper.GetDirectoryName(_testExecutionContext.CurrentTest.TypeInfo.Assembly);
public string WorkDirectory => _testExecutionContext.WorkDirectory;
public Randomizer Random => _testExecutionContext.RandomGenerator;
public TestContext(TestExecutionContext testExecutionContext)
{
_testExecutionContext = testExecutionContext;
}
public static void Write(bool value)
{
Out.Write(value);
}
public static void Write(char value)
{
Out.Write(value);
}
public static void Write(char[] value)
{
Out.Write(value);
}
public static void Write(double value)
{
Out.Write(value);
}
public static void Write(int value)
{
Out.Write(value);
}
public static void Write(long value)
{
Out.Write(value);
}
public static void Write(decimal value)
{
Out.Write(value);
}
public static void Write(object value)
{
Out.Write(value);
}
public static void Write(float value)
{
Out.Write(value);
}
public static void Write(string value)
{
Out.Write(value);
}
[CLSCompliant(false)]
public static void Write(uint value)
{
Out.Write(value);
}
[CLSCompliant(false)]
public static void Write(ulong value)
{
Out.Write(value);
}
public static void Write(string format, object arg1)
{
Out.Write(format, arg1);
}
public static void Write(string format, object arg1, object arg2)
{
Out.Write(format, arg1, arg2);
}
public static void Write(string format, object arg1, object arg2, object arg3)
{
Out.Write(format, arg1, arg2, arg3);
}
public static void Write(string format, params object[] args)
{
Out.Write(format, args);
}
public static void WriteLine()
{
Out.WriteLine();
}
public static void WriteLine(bool value)
{
Out.WriteLine(value);
}
public static void WriteLine(char value)
{
Out.WriteLine(value);
}
public static void WriteLine(char[] value)
{
Out.WriteLine(value);
}
public static void WriteLine(double value)
{
Out.WriteLine(value);
}
public static void WriteLine(int value)
{
Out.WriteLine(value);
}
public static void WriteLine(long value)
{
Out.WriteLine(value);
}
public static void WriteLine(decimal value)
{
Out.WriteLine(value);
}
public static void WriteLine(object value)
{
Out.WriteLine(value);
}
public static void WriteLine(float value)
{
Out.WriteLine(value);
}
public static void WriteLine(string value)
{
Out.WriteLine(value);
}
[CLSCompliant(false)]
public static void WriteLine(uint value)
{
Out.WriteLine(value);
}
[CLSCompliant(false)]
public static void WriteLine(ulong value)
{
Out.WriteLine(value);
}
public static void WriteLine(string format, object arg1)
{
Out.WriteLine(format, arg1);
}
public static void WriteLine(string format, object arg1, object arg2)
{
Out.WriteLine(format, arg1, arg2);
}
public static void WriteLine(string format, object arg1, object arg2, object arg3)
{
Out.WriteLine(format, arg1, arg2, arg3);
}
public static void WriteLine(string format, params object[] args)
{
Out.WriteLine(format, args);
}
}
}