使用MSTest,我需要从[TestInitialize]方法中获取当前测试的名称.您可以从TestContext.TestName酒店获取此信息.
我发现TestContext传入[ClassInitialize]方法的静态与声明为公共属性的静态(并由测试运行器设置)之间的行为有意想不到的差异.
请考虑以下代码:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestContext.Tests
{
[TestClass]
public class UnitTest1
{
public TestContext TestContext { get; set; }
private static TestContext _testContext;
[ClassInitialize]
public static void SetupTests(TestContext testContext)
{
_testContext = testContext;
}
[TestInitialize]
public void SetupTest()
{
Console.WriteLine(
"TestContext.TestName='{0}' static _testContext.TestName='{1}'",
TestContext.TestName,
_testContext.TestName);
}
[TestMethod] public void TestMethod1() { Assert.IsTrue(true); }
[TestMethod] public void TestMethod2() { Assert.IsTrue(true); }
[TestMethod] public void TestMethod3() { Assert.IsTrue(true); }
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个测试方法,它调用2个子测试方法.子方法都是从XML文件驱动的数据.如果我运行每个子方法,它们运行良好且成功.但是,当我运行主测试方法(两个子方法的调用者)时,它发现TestContext.DataConnection和TestContext.DataRow为null.
private TestContext testContext;
public TestContext TestContext
{
get { return testContext; }
set { testContext = value; }
}
[TestMethod]
public void SaveEmpty_Json_LocalStorage()
{
// Testing JSON Type format export and save
SetWindowsUsers();
// Add Network Information
SetWifiInformation();
// More logic and assertions here.
// More logic and assertions here.
// More logic and assertions here.
}
[TestMethod]
[DeploymentItem("input.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
"input.xml",
"User",
DataAccessMethod.Sequential)]
public void SetWindowsUsers()
{
Console.WriteLine(TestContext.DataRow["UserName"].ToString())
// MORE LOGIC and Asserts
}
[TestMethod]
[DeploymentItem("input.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
"input.xml",
"WifiList", …Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个自动回归测试框架作为单元测试。所以我使用有序测试来组合不同的测试步骤,并以易于使用的方式组合它们。出于配置目的,我想使用runsettings文件,尤其是 TestRunParameters。这工作没有任何错误,但只有在单独执行每个测试时才有效。如果我使用orderedtest执行测试,TestContext我用来访问 TestRunParameters 的对象不再包含它们。我在直接测试方法的同时调试对象,同时也使用有序测试进行测试。在第一种情况下,对象具有所需的属性,但是当按照orderedtest 执行测试时,对象看起来完全不同。这两种类型的执行之间有什么主要区别吗?
不同的 TestContext 对象:
我得到的错误如下:
Ergebnis StackTrace: at Regression.FileSystem.FileSystemTestInitializer(TestContext context) in \FileSystem.cs:line 18
Ergebnis Meldung: Class Initialization method Regression.FileSystemTestInitializer threw exception. System.NullReferenceException: System.NullReferenceException: Object reference not set to an instance of an object..
Run Code Online (Sandbox Code Playgroud)
我执行以测试和加载设置的代码如下:
namespace Regression
{
[TestClass]
public class FileSystem
{
private static Logger logger = LogManager.GetCurrentClassLogger();
private static Dictionary<String, String> runSettings = new Dictionary<String, String>();
[ClassInitialize]
public static void …Run Code Online (Sandbox Code Playgroud) 我们正在使用 Azure DevOps 来运行使用 Visual Studio Test 运行测试的构建。
一切工作正常,Console.WriteLine行正在写入Standard Console Output.log,但TestContext.WriteLine没有出现在详细报告中。
相同的行确实出现在Visual Studio 中的Output链接中Test Explorer。
构建解决方案: Visual Studio 2017`
VS测试:最新
测试框架: MSTest.TestFramework 1.3.2
测试适配器: MSTest.TestAdapter 1.3.2
重申一下,TestContext正在正确实例化,我们可以检查本地计算机上的输出 ( Visual Studio 2015 Update 3),但是输出不会发布到 Azure Pipelines 版本
谢谢,问候
TestContext这些是在class 及其各自的定义中定义的(未弃用的)目录。
DeploymentDirectory
ResultsDirectory
TestResultsDirectory
TestRunDirectory
TestRunResultsDirectory
我发现他们很模棱两可。每个目录都有一些可靠的示例用法吗?例如,如果我要测试文件 I/O,如果我想创建临时lorem ipsum文件,那么其中任何一个都可以吗?
testcontext ×5
c# ×4
unit-testing ×3
mstest ×2
.net ×1
azure-devops ×1
ordered-test ×1
runsettings ×1
testing ×1
vstest ×1