1

<s></s>中的行导致抛出ClassNotFoundException并且必须进行处理才能编译。如果我通过使用 try-catch 解决编译错误,那么如果抛出异常,每个单元测试都将使用未初始化的实例。如果我添加throws到方法签名会发生什么?

@Test
public class PanelControllerTest {

    private PanelController panelController;

    @BeforeTest
    public void beforeTest() {

        panelController = <s>new PanelController();</s>

    }
}

我是测试夹具的新手,我假设这是测试类实例的正确方法。在测试夹具设置代码中处理异常的最佳方法是什么?

更新: 这似乎是从 PanelController 调用的异常的来源:

class DBAccess {
    public DBAccess(DBConnection dbConnection) throws ClassNotFoundException {
         Class.forName(Constants.jdbcDriver);
         ...
    }
}
4

1 回答 1

2

正确的行为是捕获异常并使测试运行失败。

@BeforeTest
public void beforeTest() {
  try{
    panelController = new PanelController();
  } catch (Exception e) {
    fail("Test failed because dependency could not be instantiated. Exception was:"+e.getMessage());
  }
}

在理想的世界中,您在运行测试时可能不会依赖数据库(因为很难管理它们的测试状态),而是使用模拟对象。尽管如此,如果您必须依赖它,最好在数据库出现故障时使测试运行失败,并将其作为直接故障浮出水面。

于 2013-08-26T22:02:50.207 回答