C# 在nunit测试中进行手动交互吗?

C# 在nunit测试中进行手动交互吗?,c#,nunit,C#,Nunit,我正在使用C#和.NET Core中的Nunit对一些电子产品进行硬件/生产测试。测试用例以不同的方式刺激硬件,作为最后的检查,我打开一个LED。这有点难以自动验证(不构建一些自定义硬件),因此我希望有一个手动验证步骤,让用户在LED是否打开时说通过或失败。这在努尼特有可能吗 我尝试过使用Console.ReadLine()/Console.ReadKey(),但不起作用。有没有什么办法可以让这一切顺利进行,或者有没有其他办法 我的另一个选择是将此手动步骤置于Nunit框架之外,例如在shell

我正在使用C#和.NET Core中的Nunit对一些电子产品进行硬件/生产测试。测试用例以不同的方式刺激硬件,作为最后的检查,我打开一个LED。这有点难以自动验证(不构建一些自定义硬件),因此我希望有一个手动验证步骤,让用户在LED是否打开时说通过或失败。这在努尼特有可能吗

我尝试过使用
Console.ReadLine()/Console.ReadKey()
,但不起作用。有没有什么办法可以让这一切顺利进行,或者有没有其他办法


我的另一个选择是将此手动步骤置于Nunit框架之外,例如在shell脚本中。但这样我就失去了结果处理的好处和更多。对此有什么建议吗?

当然可以破解nuint,但这个“功能”值得吗?我认为这会让你/你的同事们感到难闻,并且会花费更多的支持资源,因为这里没有简单的解决方法。我建议您将逻辑分为两部分:

一个用于半自动(即手动测试),作为简单的控制台应用程序提供专家问题和答案(一些LED是否打开/关闭?火花熄灭?电源组爆炸?)

另一个用于作为简单dll的自动测试(NUnit、ot等)


这种方法的好处是,您可以在某个时间点(可能在开始时)从半自动控制台应用程序运行自动测试,并且可以轻松地与专家交互。

NUnit和其他测试框架旨在执行单元测试

单位的定义是

单元测试通常是由软件编写和运行的自动化测试 开发人员要确保应用程序的某个部分(称为 “装置”)符合其设计并按预期运行

因此,基本上,您想要做的不是单元测试,而是集成测试,因为您想要测试解决方案的两个不同的领域(即软件和硬件)是否协同工作

因此,这并不是NUnit或类似的单元测试框架设计的目的


因此,使用NUnit测试软件部分,然后查看集成测试的其他选项,这可能意味着编写其他工具,甚至只是手动执行

NUnit不能真正与控制台一起工作——事实上,你不应该用它来测试需要用户交互的东西——这将是一个集成测试。尽管您可以实现它:

if(Double.TryParse(Console.ReadLine(), out var ok) && ok)
    Assert.Pass("Test OK");
else
    Assert.Fail("Test failed");
我怀疑这是一个好主意,因为它不可能自动化——这是单元测试的主要目标之一

由于无论测试是否成功,您所需要的似乎都是NUnit的标记,因此我将始终使用
Assert.Inconclusive
来指示用户必须以某种方式手动解释结果(例如文件)。事实上,对于这种类型的测试,你可以完全忽略NUnit,只需启动你的应用程序,让你的用户像往常一样使用它


此外,为所有可测试的内容编写单元测试。如果需要,重构代码以获得可测试的东西,这就是从UI中提取业务逻辑。

我认为NUnit不是一个好的解决方案。简单的控制台应用程序将足以进行交互。最好让事情尽可能简单-将逻辑分为交互式和非交互式。您是否只需要手动“此测试正常/不正常”选项来指示绿色或红色测试?然后不要依赖NUnit来获得结果,只需像往常一样在没有NUnit的情况下执行控制台。@HimBromBeere:基本上是的。谢谢。然而,在实践中,“单位”的定义差异很大。我已经用了10多年的时间,使用为小型单元设计的不同单元测试框架进行集成测试和硬件测试。这是我第一次使用nunit。谢谢!许多单元测试框架也是良好的通用测试框架(可用于集成、手动、硬件等测试)。显然,努尼特的情况并非如此,因为缺乏这一“特征”。我很可能会做一些控制台/shell应用程序,为自动测试调用单元测试特性,然后分别实现手动检查。