我正在使用MSTest,我希望在测试执行之前和完成之后编写日志条目。 显然我不希望在每个测试的开始和结束时添加自定义日志记录代码 - 它只会使测试不可读并且看起来很费劲(我有> 500次测试)
使用 TestInitialize 和 TestCleanup 似乎是要走的路,但我无法获得测试名称。
有谁知道怎么做?
答案 0 :(得分:3)
在MSTest中,test context property中提供了测试用例的名称。因此,要在测试初始化(以及测试清理)方法中访问它,您可以使用以下内容: -
[TestInitialize()]
public void MyTestInitialize()
{
if (string.Equals(**TestContext.TestName**, "TestMethod1", StringComparison.OrdinalIgnoreCase))
{
}
}
此致 Aseem Bansal
答案 1 :(得分:1)
我们使用nLog进行日志记录,并使用基类进行测试初始化和测试清理,如果测试已通过,则进行日志记录。
这是基类:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NLog;
namespace Tests
{
public class TestBase
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public TestContext TestContext { get; set; }
[TestCleanup]
public void TestCleanup()
{
string testName = string.Format("{0}.{1}", TestContext.FullyQualifiedTestClassName, TestContext.TestName);
UnitTestOutcome currentTestOutcome = TestContext.CurrentTestOutcome;
string message = string.Format("Test '{0}' {1}", testName, currentTestOutcome.ToString().ToUpperInvariant());
if (currentTestOutcome != UnitTestOutcome.Passed)
{
Logger.Error(message);
}
else
{
Logger.Info(message);
}
}
[TestInitialize]
public void TestInitialize()
{
string testName = string.Format("{0}.{1}", TestContext.FullyQualifiedTestClassName, TestContext.TestName);
Logger.Info("Started with test '{0}'", testName);
}
}
}
这是使用它
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Tests
{
[TestClass]
public class JustTest : TestBase
{
[TestMethod]
public void Fail()
{
Assert.IsTrue(false);
}
[TestMethod]
public void Pass()
{
Assert.IsTrue(true);
}
}
}
这是日志文件中的部分
Started with test 'Tests.JustTest.Fail'
Test 'Tests.JustTest.Fail' FAILED
Started with test 'Tests.JustTest.Pass'
Test 'Tests.JustTest.Pass' PASSED
答案 2 :(得分:0)
更新:好的,我现在看到你得到了什么。坏消息是我不使用MSTest或MSTest夹具来查找..
在NUnit中,你可以
>"nunit-console.exe" API_Tests.dll /out:My.log /labels
这将输出以下日志文件
***** Test.Gumba.API_Tests.Tests.ArithmeticProgression.DummyTest2
Woohoo! made it till test2
***** Test.Gumba.API_Tests.Tests.ArithmeticProgression.GeneratesTheRightProgressionAsSpecifiedByTheUser
Try#0 failed. due to 0. Retrying NUnit.Framework.AssertionException: Expected is <System.Int32[10]>, actual is <System.Int32[0]>
<snipped>...
对于 MSTest 我是looking at the command line switches,以下内容看起来很有趣
mstest /testcontainer:Some.dll /detail:testname
---------------之前的答案如下-----
要回答您的问题,可以使用带有委托的方法来执行'执行'方法。但是,如果您可以详细说明为什么需要这个,那么可能有更好的解决方案来实现您的目标
e.g。
private void LogAround(Action action)
{
// log entry with calling method name using StackTrace class
action();
// log exit
}
并且电话将是
Do( delegate {
// test code
});