Microsoft .NET单元测试框架(MSTest)
VerifyTests:“TestContext”是一种类型,在给定上下文中无效
我们最近开始在 Mstest .Net 8. 项目上使用VerifyTests/Verify。 我的一位同事在本地构建时遇到错误: CS0119 'TestContext' 是一种类型,在给定的环境中无效 上下文...
dotnet 测试命令记录器仅在指定要测试具有多个项目的解决方案时写入上次测试的输出
在尝试使用 dotnet test 命令自动化基于 MSTest 的测试时,我遇到一个问题,即仅将最后一个测试项目运行(在解决方案中)的输出写入指定的
帮助我弄清楚如何重新启动 mstest 测试(我刚刚切换到它)。我知道没有内置的重新启动功能,但我知道您可以创建自定义属性。我尝试创造...
MSTest 未发现带有 CSV 文件的 [DataSource] 属性的测试
我有一个 MSTest 单元测试,无需 [DataSource] 属性即可正常运行。但是,当我添加 [DataSource] 属性以从 CSV 文件读取时,MSTest 无法发现测试。这是测试...
在 .NET Core csproj 文件中更改为 <TargetFrameworks>(复数)时出错
我正在关注 Pluralsight 上的一个关于让 MSTest 项目同时针对 .net core 2.2 和 .NET 4.7.2 的教程。 这需要转到我的测试项目的 .csproj 文件并对其进行编辑,以便...
如何为依赖于 DbEntityEntry 的对象创建单元测试
我有以下辅助方法,它从 DbEntityValidationException 中取出验证消息。我们需要这个,因为验证的详细信息默认不会添加到异常中......
我正在尝试使用 CloseXlm 读取 xlsx 文件,因此我创建了以下 ReadFile 方法。为了测试它,我使用 MSTest 创建了一个测试方法,以及另一个创建 xlsx 文件的方法,并且...
使用 dotnet CLI 在 VScode 中测试 .net4.8
我正在尝试将使用 Visual Studio 生成的旧的非 SDK 样式 mstest 项目转换为仅使用 Visual Studio Code 的新 SDK 样式项目。 我阅读并遵循了这个小操作方法...
使用 Microsoft.VisualStudio.TestTools.UnitTesting; 使用系统; 命名空间 PdbLib { 公共静态类 AssertExtensions { 公共静态无效 AssertVec3Equal(此断言断言,V ...
我有一个测试,需要读入然后解析 XML 文件。我怎样才能每次都将此文件复制到测试运行文件夹中? XML 文件设置为“如果较新则复制”并编译...
我是 Selenium 新手,我正在尝试通过 CSV 文件执行数据驱动测试。为此,我在包含测试属性的类中定义 DataSource 属性。我正在使用 MStest 框架...
我需要在 TestMethod 之前访问 TestContext.Properties,以便测试可以接收正确的环境进行测试。 我的 test.runsettings 的内容: 我需要在 TestContext.Properties 之前访问 TestMethod,以便测试可以接收正确的环境进行测试。 我的test.runsettings的内容: <?xml version="1.0" encoding="utf-8"?> <RunSettings> <TestRunParameters> <Parameter name="colegio" value="7" /> </TestRunParameters> 如您所见,该文件仅包含一个参数,称为 colegio (school) 这是TestBase.cs的内容: using Microsoft.VisualStudio.TestTools.UnitTesting; using InfraestructureSelenium.Helper; using System.Collections.Generic; using InfraestructureSelenium.Configuration.Enumerados; namespace TestSelenium { [DeploymentItem("chromedriver.exe")] [DeploymentItem("IEDriverServer.exe")] [DeploymentItem("phantomjs.exe")] [DeploymentItem("geckodriver.exe")] [TestClass] public class TestBase { protected TestBase() { } public TestBase(int id = (int)ColegioEnum.ColegioDemoMovilidad2_Supervisor) { DiccionarioCompartido = new Dictionary<string, string>(); SeleniumHelper = new HelperSelenium(id, WebDriverSelector.ObtenerWebDriver()); } public TestBase(HelperSelenium seleniumHelper, Dictionary<string, string> diccionarioCompartido = null) { SeleniumHelper = seleniumHelper; } public HelperSelenium SeleniumHelper { get; set; } public static Dictionary<string, string> DiccionarioCompartido { get; set; } public void CloseBrowser() { SeleniumHelper.Quit(); } #region Configuración Test [TestInitialize] public void InitializeTest() { } [TestCleanup] public void TestCleanupTest() { SeleniumHelper.Quit(); } #endregion } } 如您所见,public TestBase(int id = (int)ColegioEnum.ColegioDemoMovilidad2_Supervisor)接收到一个参数,该参数对应于我要测试的colegio环境。如果没有 colegio 作为参数传递,则默认值为 ColegioEnum.ColegioDemoMovilidad2_Supervisor 但是,当我尝试在 TestContext 中实例化 TestClass 时,如下所示: [TestClass] public class GenerarBoletinDeClase : TestBase { public TestContext TestContext { get; set; } private static TestContext _testContext; [TestInitialize] public static void SetupTests(TestContext testContext) { _testContext = testContext; } public GenerarBoletinDeClase() : base((int)TestContext.Properties["colegio"]) { } 出现以下错误:An object reference is required for the non-static field, method, or property 感谢任何帮助,因为我已经给这个问题很多时间,但我无法取得进一步的进展。 你必须解决一些问题: TestInitialize 方法不能是静态的,并且不应该有任何参数 您将需要带有 ClassInitialize 属性和 TestContext 作为参数的静态方法 测试类中的 TestContext 不能是静态的 之后,您可以在任何单元测试中访问您想要的任何属性。这是一个例子: [TestClass] public class GenerarBoletinDeClase { public TestContext TestContext { get; set; } public static int Colegio { get; set; } [ClassInitialize] public static void ClassInitialize(TestContext testContext) { Colegio = int.Parse(testContext.Properties["colegio"].ToString()); // colegio is equal 7 in here } [TestInitialize] public void TestInitialize() { int tempColegio = int.Parse(this.TestContext.Properties["colegio"].ToString()); // colegio is equal 7 in here } [TestMethod] public void TestMethod1() { int colegio = int.Parse(this.TestContext.Properties["colegio"].ToString()); // colegio is equal 7 in here as well Assert.AreEqual(7, Colegio); Assert.AreEqual(7, colegio); Assert.AreEqual(colegio, Colegio); } } 使用文件:test.runsettings 1-您必须手动选择运行设置文件 在 IDE 中,选择测试 > 配置运行设置 > 选择解决方案范围运行设置 文件,然后选择 .runsettings 文件。 2-设置构建属性 您已通过属性指定项目的运行设置文件:RunSettingsFilePath 参考 如本 Microsoft 文档 中所述,您无需分配 TestContext 来填充它。它会在每次 TestInitialize() 调用之前自动分配。从那里,您可以通过属性访问 *.runsettings 中定义的属性。 总之,只需添加一个名为 TestContext 的 TestContext 类型属性,MS Test 将在运行时填充它。 首先,感谢@Peska提供了这个答案中的代码https://stackoverflow.com/a/51367231/5364231 所以,最后我所做的就是将以下代码添加到类中TestBase: public class TestBase { public TestContext TestContext { get; set; } public static int Colegio { get; set; } [AssemblyInitialize] public static void ClassInitialize(TestContext TestContext) { Colegio = int.Parse(TestContext.Properties["colegio"].ToString()); // colegio is equal 7 in here } public TestBase() { SeleniumHelper = new HelperSelenium(Colegio, WebDriverSelector.ObtenerWebDriver()); DiccionarioCompartido = new Dictionary<string, string>(); } 装饰器[AssemblyInitialize]是必要的,[ClassInitialize]和[TestInitialize]将不起作用,我相信是因为TestContext尚未实例化。 之后,请确保您已通过转到Test Settings File配置了Test > Test Settings > Select Test Settings File,该文件必须命名为*.runsettings 这样,一切都应该设置为 TestContext.Properties 从测试设置文件中读取
我正在 Visual Studio 2010 中编写单元测试。 为了测试某些功能,我添加了一个包含测试文件的文件夹。 我需要以编程方式获取此文件夹,而无需字符串中的硬路径。 佛...
我正在尝试创建一个任务的子类,它会自行取消并等待它被释放。 在单元测试时,我遇到了奇怪的失败测试用例。最终归结为重复。我什至可以...
ReSharper 测试运行程序忽略 `.runsettings` 文件,但 Visual Studio 测试运行程序可以工作
我面临一个问题,即当我通过 ReSharper 测试运行程序运行测试时,.runsettings 文件不会影响测试的执行。然而,当我使用 Visual Studio 的 bu 运行测试时...
我首先要声明,我是 StackOverflow、使用 NSubtitute 进行单元测试以及在 C# 中使用操作/委托的新手 - 所以对于任何格式和/或术语的误用提前致歉...
c# NSubstitute:如何测试本身作为方法参数传递的 Action 的参数?
我首先要声明,我是 StackOverflow、使用 NSubtitute 进行单元测试以及在 C# 中使用操作/委托的新手 - 所以对于任何格式和/或术语的误用提前致歉...
假设我们想测试以下方法。这是一个人为的网络调用,如果请求失败,它会记录一个警告,然后在三次尝试后抛出。 私有异步任务 假设我们想测试以下方法。这是一个人为的网络调用,如果请求失败,它会记录一个警告,然后在三次尝试后抛出。 private async Task<HttpResponseMessage> ContrivedNetworkRequest(ILogger<IContrived> logger, HttpClient client) { for (var i = 0; i < 3; i++) { var response = await client.GetAsync("http://example.com"); if (response.IsSuccessStatusCode) return response; logger.LogWarning("Warning!"); } throw new ContrivedException("Error!"); } 我们只想测试是否记录了警告日志。也就是说,我们不想测试该方法是否抛出异常。抛出在其他地方进行了测试,我们不希望在这种情况下在同一个测试中使用两个断言来测试日志记录和抛出。 有没有办法告诉 MSTest V3(使用 .NET 8)在发生异常时退出测试方法,因为我们只对其他功能感兴趣? 有没有办法告诉 MSTest V3(使用 .NET 8)在发生异常时退出测试方法 异常已经退出方法。 该测试可以像任何其他代码一样简单地捕获该异常。 例如: // arrange var logger = CreateMockLogger(); var client = CreateMockClient(); // act try { ContrivedNetworkRequest(logger, client) } catch {} // assert // ...
如何从 TestMethodAttribute 中访问 TestContext
我正在尝试编写一个自定义 TestMethodAttribute,它允许使用一些元信息来注释测试,这些元信息应在 MSTest 测试运行程序生成的 .trx 文件中输出。 因此我
我有一个包含 TestClasses 和 TestMethods 的 MSTest 项目。由于系统先决条件不合适,一些测试被忽略。尽管如此,测试似乎仍在运行。 这表明...