我有一个测试,在运行测试之前我不需要运行SetUp
方法(归因于[SetUp]
)。我需要运行SetUp
方法进行其他测试。
是否可以使用不同的属性或基于非属性的方法来实现此目的?
答案 0 :(得分:22)
您还可以添加类别并检查设置中的类别列表:
public const string SKIP_SETUP = "SkipSetup";
[SetUp]
public void Setup(){
if (!CheckForSkipSetup()){
// Do Setup stuff
}
}
private static bool CheckForSkipSetup() {
ArrayList categories = TestContext.CurrentContext.Test
.Properties["_CATEGORIES"] as ArrayList;
bool skipSetup = categories != null && categories.Contains( SKIP_SETUP );
return skipSetup ;
}
[Test]
[Category(SKIP_SETUP)]
public void SomeTest(){
// your test code
}
答案 1 :(得分:17)
您应该为该测试创建一个新类,它只需要设置(或缺少设置)。
或者,您可以将设置代码解释为所有其他测试调用的方法,但我不建议使用此方法。
答案 2 :(得分:2)
您可以在基类中使用主SetUp
:
[SetUp]
public virtual void SetUp()
{
// Set up things here
}
...然后在你没有运行SetUp
代码的测试的类中覆盖它:
[SetUp]
public override void SetUp()
{
// By not calling base.SetUp() here, the base SetUp will not run
}
答案 3 :(得分:1)
以下是我建议您完成所需内容的代码:
public const string SKIP_SETUP = "SkipSetup";
private static bool CheckForSkipSetup()
{
string category = string.Empty;
var categoryKeys = TestContext.CurrentContext.Test.Properties.Keys.ToList();
if (categoryKeys != null && categoryKeys.Any())
category = TestContext.CurrentContext.Test.Properties.Get(categoryKeys[0].ToString()) as string;
bool skipSetup = (!string.IsNullOrEmpty(category) && category.Equals(SKIP_SETUP)) ? true : false;
return skipSetup;
}
[SetUp]
public void Setup()
{
// Your setup code
}
[Test]
public void WithoutSetupTest()
{
// Code without setup
}
[Test]
[Category(SKIP_SETUP)]
public void CodeWithSetupTest()
{
// Code that require setup
}
答案 4 :(得分:0)
我不相信你能做到这一点,这将涉及知道哪些测试即将开始,我认为不可能。
我建议你把它放在另一个[TestFixture]
中答案 5 :(得分:0)
以下是我建议您完成所需内容的代码。
public const string SKIP_SETUP = "SkipSetup";
现在添加以下方法:
private static bool CheckForSkipSetup()
{
var categories = TestContext.CurrentContext.Test?.Properties["Category"];
bool skipSetup = categories != null && categories.Contains("SkipSetup");
return skipSetup;
}
现在检查条件如下:
[SetUp]
public async Task Dosomething()
{
if (!CheckForSkipSetup())
{
}
}
在测试用例中使用以下内容:
[Test]
[Category(SKIP_SETUP)]
public async Task Mywork()
{
}
答案 6 :(得分:0)
每个@MiGro 回答 here 我通过使用另一个测试命名空间和它自己的 [OneTimeSetUp]
来实现它,并为我想开始以与其他人不同的方式测试的类使用不同的实现。