如何对可打印到物理打印机的功能进行单元测试?

时间:2019-02-20 00:01:41

标签: c# .net unit-testing winapi printing

如何自动测试WPF应用程序的打印功能,包括更改常见的打印属性,例如纸张尺寸,纸盘,横向/纵向等?

我正在考虑使用诸如EmfPrinter之类的虚拟打印机驱动程序,但是我仍然不知道如何验证例如正确设置的纸盒。

1 个答案:

答案 0 :(得分:2)

您的测试问题可能包含单元测试方面,但是从描述看来,它似乎(至少也)解决了集成测试方面的问题。例如,您问

  

例如,如何验证纸盘是否已正确放置

我以下列方式阅读:您要确保软件的打印功能能够实现在真实的物理打印机上正确设置纸盘。如果这种理解是正确的,那么那就超出了单元测试所能达到的范围:

通过单元测试,您尝试在孤立的小型软件中查找错误。通过替换被测软件(SUT)所依赖的组件来实现隔离。这些替换组件通常称为double,mock或stub。但是,使用此类双打,您将找不到那些与对SUT与依赖组件的交互应如何工作的误解有关的错误:由于您实施了双打,因此需要根据潜在的误解来实现它们。 / p>

对于打印机功能,这意味着,如果将纸盒选择功能加倍,则可以测试设备的某些方面,但是您仍然不知道它是否与 real 纸张正确交互。纸盘选择功能。这不是单元测试的缺陷:这只是为什么除了单元测试之外,您还需要集成和系统测试的原因。

要解决测试问题的各个方面,可以使您的生活更轻松:设计代码,以便尝试将计算与交互分开。然后,您将使用单元测试来测试包含计算的单元(功能,方法等)。那些包含您将使用集成测试测试的交互的部分。可能会存在难以分开的代码部分,您将剩下的计算与交互混合在一起。在这里,您可能需要对单元进行双重测试(通过设计确保可以注入它们-请参见依赖项注入和控件反转)。但是,通常这种策略可以节省您创建双打的大量精力。