我将使用NUnit添加自动化的单元测试,以测试公司正在使用的现有的自行开发的C#应用程序。如果我使用两个测试,则只有其中一个可见并运行。
我正在使用Visual Studio 2019 Professional和NUnit v3.11.0以及Nunit3TestAdapter v3.13.0。
我创建了两个实现IEnumerator的类,以及两个使用测试文件中数据的方法,即上述类中定义的简单.csv。
// Test 1 - success (ok dates)
public class DonneesTestOK : IEnumerable
{
public IEnumerator GetEnumerator()
{
var reader = new StreamReader(File.OpenRead(
@"C:\GIT_Repo\ndm1001\TestSucces.csv"));
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
string psDatesDebut = values[0];
yield return new string[] { psDatesDebut };
}
}
}
// Test 2 - fail (bad dates)
public class DonneesTestPasOK : IEnumerable
{
public IEnumerator GetEnumerator()
{
var reader = new StreamReader(File.OpenRead(
@"C:\GIT_Repo\ndm1001\TestEchec.csv"));
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
string psDatesDebut = values[0];
yield return new string[] { psDatesDebut };
}
}
}
我还创建了两种方法来使用相应的数据文件测试主应用程序。
[TestFixture]
public class TestNUnit
{
// test 1 - succes (ok dates)
[TestCaseSource(typeof(DonneesTestOK))]
public void TestNDM1001OK(string[] psDatesDebut)
{
int intCodeRetour = 0x00;
int expected = intCodeRetour;
Assert.That(Program.Main(psDatesDebut), Is.EqualTo(expected));
}
// test 2 - echec (bad dates)
[TestCaseSource(typeof(DonneesTestPasOK))]
public void TestNDM1001PasOK(string[] psDatesDebut)
{
int expected = 8;
Assert.That(Program.Main(psDatesDebut), Is.EqualTo(expected));
}
}
只有 TestNDM1001OK 可见并运行。
主要方法声明如下:
class Program
{
public static int Main(string[] args)
...
}
与其他应用程序中的测试一样,代码应测试主应用程序并生成具有正确数据的输出文件。 我使用来自.csv的一系列日期测试该应用程序,然后该应用程序生成了一些输出文件。
已修复:
好的,这是初学者的错误。 我比较了两种测试都能正常工作的VS2017环境和一种无法正常工作的VS2019环境。
在VS2019中的“测试资源管理器”中的“全部运行”和“运行...”选项之外,我还注意到了“播放列表”部分,其中选择了名为“ PasOK”的播放列表。我想知道为什么会这样,并且想起了星期五,我创建了两个播放列表,但不记得我选择了其中一个。在VS2017中,没有选择任何东西,并且一切正常。因此,我在VS2019中将下拉列表更改为“播放列表“所有测试”,现在可以使用了。
答案 0 :(得分:0)
您是否尝试安装MSTest.TestAdapter?vs2017有类似问题
答案 1 :(得分:0)
如果您没有看到第二种方法的任何测试,则该方法的源不返回任何数据。为了找出原因,只需调试它的枚举器即可。