Java 当函数通常使用文件作为输入时,如何在方法的异常处理程序上运行JUnit测试?

Java 当函数通常使用文件作为输入时,如何在方法的异常处理程序上运行JUnit测试?,java,unit-testing,file-io,junit,exception-handling,Java,Unit Testing,File Io,Junit,Exception Handling,我试图编写一个单元测试来测试一个方法的异常处理程序,但我不确定如何进行 包含要测试的异常处理程序的函数调用其他函数(从文件中获取其输入)以获取某些输入(不是在测试函数的参数内传递,而是返回到函数)。传递给被测试函数的参数是其他函数要使用的输入文件名(在调用它们时传递给它们) 我可能难以解释,因此这里有一些我想要测试的函数的示例(我知道这看起来像我正在测试的测试本身,但它是另一种测试): 我如何确保异常处理程序在应该抛出异常时抛出异常,而在不应该使用单元测试时不抛出异常 对于一般的测试,我是否应该

我试图编写一个单元测试来测试一个方法的异常处理程序,但我不确定如何进行

包含要测试的异常处理程序的函数调用其他函数(从文件中获取其输入)以获取某些输入(不是在测试函数的参数内传递,而是返回到函数)。传递给被测试函数的参数是其他函数要使用的输入文件名(在调用它们时传递给它们)

我可能难以解释,因此这里有一些我想要测试的函数的示例(我知道这看起来像我正在测试的测试本身,但它是另一种测试):

我如何确保异常处理程序在应该抛出异常时抛出异常,而在不应该使用单元测试时不抛出异常

对于一般的测试,我是否应该使用在单元测试中有输入的文件(并通过其他方法获取),创建专门用于测试的文件,并使用我在单元测试函数本身中指定的输入手动传递函数的整个参数(将数据放在括号中,并将其传递给不使用文件名作为参数的函数副本,并将该方法与其他方法隔离)


我应该使用断言语句吗?如果是的话,它们应该是什么样子?

我认为这是一个非常好的用例,考虑单元测试会迫使您更好地设计应用程序。我认为您可以将处理文件的逻辑分解为更小的单元(函数或不同的类,如果可能的话)。然后您应该尝试编写每个单元的“单元测试”

另一方面,为了检查是否在单元测试中抛出了异常,您的方法应该抛出异常以及该方法的所有客户端(使用该方法的其他代码,您的单元测试)应该期望抛出该异常,并捕获它或根据您认为合适的方式重新抛出它。在单元测试的情况下,您可以捕获该异常并在那里放置一些验证断言。您可以在调用此方法后立即使用无效断言,如果未抛出该异常,则您的单元测试将移动到下一行,并且t将在那里失败。请参见以下内容:

your unitTest()
{
 try {
  // make a call to the method you want to test
    yourMethod.call(inputToAllowException);
    Assert.assertEquals(1 , 0); // you should not reach here if the exception was thrown
 } catch(YourException ye)
 {
  //assertion or print to say exception was thrown
 }
}

posibleduplicate将处理程序的业务逻辑外部化为单独的方法或类,然后对这些方法或类执行JUnit测试methods@cluemein你可能会想知道为什么这封信不清楚?它可能是重复的,但为什么不简单地将它与另一封合并呢?我编辑了这个问题,以便更清楚地说明我是谁询问并更正一些语法,因此请重新打开并删除否决票。此外,下面有一个非常好的答案和解释,因此应该会有所帮助。如果您想测试异常,请使用框架的选项,如JUnit中的
@expected(YourException.class)
。我没有使用过这样的选项(最近没怎么做),所以如果这是可用的,那就太好了。
your unitTest()
{
 try {
  // make a call to the method you want to test
    yourMethod.call(inputToAllowException);
    Assert.assertEquals(1 , 0); // you should not reach here if the exception was thrown
 } catch(YourException ye)
 {
  //assertion or print to say exception was thrown
 }
}