我想单元测试一个做SAX解析并创建一个对象的类。 该类将一个字符串作为表示Internet上文档URL的参数,对其进行解析,然后根据内容创建一个对象。如何重构我的课程,以便我可以进行单元测试?
我不想让单元测试实际访问网络,所以我想要解析一些测试xml文件。不过,我不知道如何从我的AndroidTestCases访问它们。我不想将测试文件包含在实际应用程序中,我希望他们在测试项目中(这是一个单独的项目,因为我可以收集Android测试的标准 - 由于需要定制AndroidManifest .xml,一个)。
一种方法是将XML文件放入测试项目的资产目录中,我可以使用getContext().getAssets().open(filename
)将它们读入测试用例中的InputStream
,但是我的类需要一个URL字符串。我宁愿不必为此类提供InputStream而不是当前的URL字符串。我可以通过创建两个方法来测试解析,一个接受一个字符串,一个接受Inputstream,然后测试第二个,但是我怎么才能测试一个只接受一个字符串的方法呢?
我应该如何设计我的班级和/或测试来规避此问题?
该方法和使我的类接受InputStream而不是字符串有什么区别?这不仅仅是增加额外的间接水平? – JRL 2010-05-21 14:34:12
是的。这种额外的抽象层次意味着您可以在不影响主要方法的情况下更改底层代码。然后,您不必在正常情况下将InputStream传递到方法中,因为这通常不是您需要完成的任务。 – Tejs 2010-05-21 14:45:33