论坛首页 综合技术论坛

单元测试如何应对以下2个简单的情况

浏览 18072 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-06-06  
本来以为单元测试不会弄得很复杂,可是现在确实遇到了两个问题:
1、是不是在类的方法中不要使用new来产生一个对象?例如,有如下类
class MyClass{
  public method_1(){
    OtherClass oc = new OtherClass();
    ......
  }
}

如果要对MyClass类的method_1方法进行单元测试的话,是很困难的。因为method_1方法内部固定绑定了OtherClass类,如果OtherClass类是依赖于一些环境的话(如EJB),就很麻烦了。
我的问题是,如果不直接new OtherClass类,应该如何获得OtherClass对象呢?ok,有人可能会说用ioc,那么,如果是这样一种情况:ClassA-ClassB-ClassC-ClassD,是一个级连依赖结构,该如何进行ioc?

2、如下类:
class MyClass{
  public method_1(){
    method_1();
    ......
  }

  private method_2(){
    OtherClass oc = new OtherClass();
    ......
  }
}
其中,OtherClass是严重依赖于环境的(如EJB)。我的问题是,如何测试MyClass类的method_1方法内部一定调用了私有方法method_2??
   发表时间:2006-06-06  
有MockEJB吧,
没有使用过,具体去查查吧
0 请登录后投票
   发表时间:2006-06-06  
上面的兄弟说得没错,是需要mock,我现在用的也正是jmock库。可是,如何mock?在什么时候,什么点上mock?不要告诉我写一个setter方法,然后注入mock对象就ok了。
0 请登录后投票
   发表时间:2006-06-06  
解决的办法就是把它们重构成具有良好可测性的代码。这也是一个设计的过程。优质的代码必然是具备良好可测性的。
1、使用ioc,但是只mock需要的第一级class或者interface
2、使用ioc和mock,并使用mock的verify()。
0 请登录后投票
   发表时间:2006-06-06  
呵呵,写一个setter方法,然后注入mock对象就ok了。
0 请登录后投票
   发表时间:2006-06-06  
晕倒,才说“不要告诉我写一个setter方法,然后注入mock对象就ok了”,后面的弟兄就这样建议我了。
0 请登录后投票
   发表时间:2006-06-07  
http://forum.iteye.com/viewtopic.php?t=20035
已经有相关讨论
0 请登录后投票
   发表时间:2006-06-07  
楼上的,你给的链接和我的问题是不同的,我的问题是很具体的技术问题,而不是讨论到底mock不mock的问题。也就是说,如何解决我上述两个单元测试遇到的问题?
0 请登录后投票
   发表时间:2006-06-07  
那全长Cactus吧,反正你都严重依赖环境
Cactus is a simple test framework for unit testing server-side java code (Servlets, EJBs, Tag Libs, Filters, ...).

The intent of Cactus is to lower the cost of writing tests for server-side code. It uses JUnit and extends it.

Cactus implements an in-container strategy, meaning that tests are executed inside the container.

你上面说的情况我觉得本身就不大合理,就应该使用IOC+Mock
0 请登录后投票
   发表时间:2006-06-07  
cactus我个人认为不属于单元测试,而是集成测试。不过,现在不讨论cactus。我的本意就是ioc+mock,问题是,哪位朋友可以针对我的2个问题给出具体点的方法?
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics