我需要在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
任何帮助都是非常感谢的,因为我给了这个问题很长的时间,我不能再进步了。
发布于 2018-07-16 20:14:22
首先,感谢@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设置从测试设置文件中读取的所有内容设置。
发布于 2018-07-16 17:30:54
你必须解决以下几个问题:
之后,您可以在任何单元测试中访问您想要的任何属性。下面是一个示例:
[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);
}
}发布于 2021-10-28 19:51:14
正如在这个Microsoft文档中所解释的,您不需要分配TestContext来填充它。它会在每次TestInitialize调用之前自动分配。从那里,您可以通过属性访问在*.runsettings中定义的属性。
总之,只需添加一个名为TestContext的TestContext类型属性,MS将在运行时填充它。
https://stackoverflow.com/questions/51364570
复制相似问题