我正在使用C#和.NET Core的Nunit在某些电子产品上进行硬件/生产测试。测试用例以不同的方式刺激了硬件,作为最后的检查,我打开了一个LED。这很难自动验证(不构建某些自定义硬件),因此我希望有一个手动验证步骤,以便用户说出是否打开LED指示灯是通过还是失败。在Nunit中甚至有可能吗?
我尝试使用不起作用的Console.ReadLine()/Console.ReadKey()
。有什么方法可以使它起作用,或者有其他替代方法吗?
我的另一种选择是将该手动步骤置于Nunit框架之外,例如在shell脚本中。但是那样的话,我将失去结果处理的好处。有什么建议吗?
答案 0 :(得分:1)
当然有可能破坏裸露,但是这种“功能”值得吗?我认为这很麻烦,并且会使您/您的同事在支持上花费更多的资源,因为这里没有简单的解决方法。我建议您将逻辑一分为二:
一种用于半自动(即手动测试)的软件,它带有简单的控制台应用程序,带有专家的问题和答案(是否有一些LED开/关?火花是否熄灭?移动电源爆炸了?)。
另一个用于自动测试(NUnit等)的简单dll。
这种方法的好处是,您可以在某个时候(可能是在开始时)从半自动控制台应用程序运行自动测试,并且可以轻松地与专家进行交互。
答案 1 :(得分:1)
NUnit不能真正在控制台上使用-实际上,您不应该使用它来测试需要用户交互的东西-这将是一个集成测试。尽管可以实现它:
if(Double.TryParse(Console.ReadLine(), out var ok) && ok)
Assert.Pass("Test OK");
else
Assert.Fail("Test failed");
我怀疑这是一个好主意,因为它不可能实现自动化-这是单元测试的主要目标之一。
由于您想要的一切似乎都是NUnit的标记,无论您的测试是否成功,我都将始终使用Assert.Inconclusive
来指示用户必须手动解释结果(例如文件)。某种方式。实际上,对于这种类型的测试,您可以完全忽略NUnit,只需启动您的应用程序,然后让您的用户照常使用它即可。
此外,为可测试的所有内容编写单元测试。为了获得可测试的东西,必要时重构代码,这是从UI中提取业务逻辑。
答案 2 :(得分:0)
NUnit和其他测试框架旨在执行单元测试。
Wikipedia将一个单位定义为
单元测试通常是由软件编写和运行的自动化测试 开发人员确保应用程序的一部分(称为 “单元”)符合其设计并按预期运行。
因此,基本上,您要做的不是单元测试,它更像是集成测试,因为您要测试解决方案的两个独立区域是否可以协同工作,即软件和硬件。 >
因此,这并不是NUnit或类似的单元测试框架的真正目的。
因此,请使用NUnit测试软件部分,然后查看用于集成测试的其他选项,这可能意味着编写其他工具,甚至只是手动进行操作!