2
我一直在想辦法將一些字符串輸出添加到NUnit測試結果。做了一些研究並碰到了this但這不是我想要的。我想將輸出寫入由NUnit
生成的結果xml
,但無法找到執行此操作的方法。請建議!將控制檯輸出添加到NUnit測試結果
編輯
我知道NUnit 3
將有一個機制通話TextContex來完成類似的東西,但我使用2.6.3
我一直在想辦法將一些字符串輸出添加到NUnit測試結果。做了一些研究並碰到了this但這不是我想要的。我想將輸出寫入由NUnit
生成的結果xml
,但無法找到執行此操作的方法。請建議!將控制檯輸出添加到NUnit測試結果
編輯
我知道NUnit 3
將有一個機制通話TextContex來完成類似的東西,但我使用2.6.3
你可以採取的PropertyAttribute
s到附着性能優勢每個測試對XML輸出。下面的例子假設你真的想要使用Console.WriteLine
來產生字符串輸出,但是如果你不想弄亂控制檯輸出,你總是可以自己製作TestConsole.WriteLine
或其他東西。
E.g.這個屬性就是一個「輸出」屬性附加到每個測試宣佈'S:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class TestWriterAttribute : PropertyAttribute
{
public TestWriterAttribute() : base()
{
// Create a container for test output
Properties["Output"] = new StringBuilder();
}
}
而這個屬性就是以Console.Out
重定向到「輸出」屬性(同樣,你可以使用自己的TestConsole
一種類代替如果您不想與Console.Out
混淆,請使用此屬性)。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class ConsoleOutToTestWriterAttribute : TestActionAttribute
{
public override void BeforeTest(TestDetails testDetails)
{
// If the test has a [TestWriter], redirect Console.Out to its "Output" property
var output = TestContext.CurrentContext.Test.Properties["Output"] as StringBuilder;
if (output != null)
Console.SetOut(new System.IO.StringWriter(output));
_consoleOutRedirected = output != null;
}
public override void AfterTest(TestDetails testDetails)
{
// Reset Console.Out, if appropriate
if(_consoleOutRedirected)
Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = true });
}
public override ActionTargets Targets
{
// needs to apply to each test, since [TestWriter]s are applied per test
get { return ActionTargets.Test; }
}
private bool _consoleOutRedirected;
}
而且你的測試可以只使用Console.WriteLine
將每次測試捕獲:
[ConsoleOutToTestWriter] // redirect Console.Out into "Output" property per test
public class ClassTest
{
[Test]
[TestWriter] // adds "Output" property
public void MyTest()
{
Console.WriteLine("test 123");
Console.WriteLine("321 test");
}
[Test]
[TestWriter]
public void MyTest2()
{
// this console output will be written to this test's own "Output"
Console.WriteLine("test2 123");
Console.WriteLine("321 test2");
}
}
其中在NUnit的XML輸出產生<results>
在以下:
<test-case name="SO_31092459.ClassTest.MyTest" executed="True" result="Success" success="True" time="0.023" asserts="0">
<properties>
<property name="Output" value="test 123
321 test
" />
</properties>
</test-case>
<test-case name="SO_31092459.ClassTest.MyTest2" executed="True" result="Success" success="True" time="0.000" asserts="0">
<properties>
<property name="Output" value="test2 123
321 test2
" />
</properties>
</test-case>
林不知道是否'Assert'語句中的'message'參數將進入xml文件。如果是這樣,也許你可以達到你想要的那樣? – nozzleman
你想打開一個XML文件,然後修改結果,還是通過一個字符串獲取XML文件?你應該可以通過c#修改任何xml。源碼來自nunit並不重要。 – jdweng
@nozzleman我想,如果我現在用的'Console.Writeline()寫' – Saifur