2014-02-28 181 views
0

假设我想测试下载错误(例如,服务器关闭或凭据无效)的某些从存储服务器下载文件的代码遵循特定的操作过程, 。测试和例外,嘲笑

我看到两种方法来测试:

选择#1:初始化明显不良凭证的真实下载服务器对象;当某些事情试图用conn做某事时它会触发一个异常;

FileServerConnection conn = new FileServerConnection("Invalid User", "Invalid Password"); 

选择#2:嘲笑FileServerConnection类并指示模拟扔当FileServerConnection对象被构造异常;

我知道Choice#2优于Choice#1,但我不明白为什么..有人可以解释为什么#2比#1好。我现在看到的第一个问题(星期五下午)唯一的问题是这是一个慢得多的测试(虽然慢了一两秒)。

干杯!的选择#1

PS一个优点是,它是较少的代码行写:-)

+2

选择1不是一个单元测试,它是一个集成测试。 – Aurand

+0

真正的选择#1是一个集成测试,但从未说过它是我原始文章中的单元测试;然后问题就变成了:为什么在这种情况下单元测试而不是集成测试,因为集成测试实际上是少量代码编写的; – MadSeb

+0

@MadSeb - 你的标题字面上说单元测试... –

回答

2

的问题是,选择#1依赖另一个系统上,您通常希望你的单元测试是独立的像这样的东西。

您在#2选择中的测试正在测试您的代码在坏凭证(您想要的)下的行为方式,但选择#1会导致测试下载服务器如何处理不当凭据(这与您的想在这里测试)。这使得你的测试更加复杂,更多的事情可能会出错。