内部功能的单元代码测试

Posted

技术标签:

【中文标题】内部功能的单元代码测试【英文标题】:Unit Code testing of internal functions 【发布时间】:2016-01-28 09:38:05 【问题描述】:

我是一个测试新手,所以我在测试某些代码部分的内部功能时磕磕绊绊。如何仅测试具有不同输入的 privateParseAndCheck 和/或 privateFurtherProcessing 功能,但我不希望它作为公共功能?

-(BOOL) publicFunction()

   //some stuff with network
   NSError* error;
   NSData* data = load(&error);
  //now I got data and parse and check
  BOOL result = privateParseAndCheck(data, error, ...);

  if( result ) 
    privateFurtherProcessing();
  
  return result;

重写代码是解决方案吗?我也对 Xcode Server 上的提示/解决方案的一些经验感兴趣。

【问题讨论】:

【参考方案1】:

如果有一种直接的方法来测试您只需要从公共方法中获得的内容,请这样做。

如果没有,您可以选择:您可以只将方法公开给测试代码。 这是一种常见的做法,但我不推荐这样做。它会抑制其他选项......

或者,完全公开该方法。如果这让您感到不舒服,可能有一个类试图退出。提取该类(您要测试的方法以及与它们一起使用的任何其他有意义的方法。)您现在可以对其进行测试类。

当很难提出不同的条件(例如不同的错误)时,这尤其有用。提取,很简单。

延伸阅读:Testability, Information Hiding, and the Class Trying to Get Out

【讨论】:

以上是关于内部功能的单元代码测试的主要内容,如果未能解决你的问题,请参考以下文章

单元测试

使代码内部化,但可用于其他项目的单元测试

学习软件测试

测试理论--测试设计中需要考虑的22种测试类型

为啥在我的单元测试中主源代码树中的“内部”类型不可见?

软件测试分类