我该如何测试超级(xy)电话?

时间:2016-12-07 14:07:37

标签: java unit-testing

我只想为这段代码编写一个单元测试:

import videosensor
import signal

# Custom signal handler
def signal_handler(signal, frame):
    """Raises a flag when a keyboard interrupt is raised."""
    global interrupted
    interrupted = True

# Necessary to override default keyboard interrupt
signal.signal(signal.SIGINT, signal_handler)  

if __name__ == '__main__':
    # Main programme

一些限制:

  • 我无法更改超类public class MyClass extends SomeClassICanNotChange { public MyClass(SomeObjectThatTheSuperClassNeed param) { super(param); } @Override protected boolean thisMethodIWantToTest() { return true; // Some magic here }
  • 必须致电SomeClassICanNotChange
  • 超类super(param)使用SomeClassICanNotChange执行某些操作,因此只有param无效(NPE)。

我想测试方法Mockito.mock(SomeObjectThatTheSuperClassNeed.class)。我唯一的想法是模拟超类需要的所有方法。有人这样想:thisMethodIWantToTest()。但这似乎不是很聪明。

有没有人知道编写此UnitTest的更好方法?

非常感谢

1 个答案:

答案 0 :(得分:0)

如果thisMethodIWantToTest)(不需要SomeObjectThatTheSuperClassNeed来实现其目的,您甚至可以将其从MyClass分离到单独的类型。 - >如果一个类型需要另一种类型,只是为了它的创建,但不需要它来实现其目的,那么它的设计就很糟糕。

如果thisMethodIWantToTest需要SomeObjectThatTheSuperClassNeed,那么它一方面是一个不讨人喜欢的设计,因为它将抽象与实现混合在一起,这使事情变得过于复杂。另一方面,您可以传递真实的实现并对其进行隐式测试(也不是那么好),或者您也可以模拟SomeObjectThatTheSuperClassNeed并为其他测试用例提供模拟。

但无论如何,如果难以测试某些东西,那么它就是设计缺陷的标志。你要么现在改变它,我认为你不能改变它,或者,我最好的猜测是你去分离到单独的类型......