3

我有一个类,其唯一目的是从接口对其他类运行方法。

测试类的接口没有问题,但是运行器实际上并没有做任何事情,并且(就目前而言)传递给构造函数的唯一参数是私有的。

就我而言,这些类正在将文本文件导入数据库。

internal DataImporter
{
  private List<IFileImporter> _importers;

  public DataImporter(List<IFileImporter> importers){
    _importers = importers;

  public bool RunImporters()
  {
    //foreach importer, call its "Run" method - each one then does whatever it needs to do
    //however, this need not call a specific "Run" method on IFileImporter
    //I have another app that uses IFileImporter to check for presence of a file first
    //then allow user to choose to import or not.
  }

在我看来,这里没有什么可以测试的吗?我无法测试 的值_importers,也不想仅仅为了测试而将其公开。DataImporter 特定于此实例,因此创建接口似乎没有任何好处。

我在其他地方重新使用了 IFileImporters,但这是唯一的“批量”导入器,其他的是从 winforms 应用程序手动调用的,还有一些根本不在这个项目中。

那么,我需要对此进行测试吗……我可以对此进行什么测试?

4

3 回答 3

2

简而言之,是的。我可以马上想到一些测试。

您的测试通过模拟您在构造函数中传递的 IFileImporters 来确保调用所有导入器。至少,它断言您在构造函数中传递的内容实际上已被该方法使用。

一个测试,以确保如果任何导入程序引发异常,您的类的行为符合您的预期。

如果列表为空,测试应该断言该行为。(默认为 True 返回?)

如果一个或多个导入器失败,测试还应该断言您期望的行为。(您是对您的 RunImporters 结果使用和-ing 或or-ing 您的导入程序结果吗?)

无论前一个是否失败,该方法是否运行每个导入器,或者在第一次失败时返回 false?

如果它提供了一个空列表,还应该对你的构造函数或断言进行测试。

于 2012-12-20T09:07:19.223 回答
2

您可以断言这些方法已被调用。您可以参考这些问题以了解如何完成:

您还可以断言在DataImporter类中没有遇到异常。

如果您对所使用的界面有绝对控制权,那么让它们中的每一个都返回一个boolean指示特定操作是否成功的指示可能会有所帮助。

于 2012-12-20T09:09:07.683 回答
1

您的方法返回bool,这就是您开始的地方,例如:

  • 没有进口商会怎样?例子:Run_ReturnsFalse_WhenThereIsNoImporters
  • 当其中一个打破(或抛出)时会发生什么?例子:Run_ReturnsFalse_WhenAtLeastOneImporterFails
  • 什么表示成功(true我想是返回)?例子:Run_ReturnsTrue_WhenAllImportersSucceed

你设置你的模拟来模拟每个场景并再次测试。当确实没有可观察到的效果(如返回值)时,您将通过验证是否对模拟对象进行了调用来做到这一点。

于 2012-12-20T09:12:36.933 回答