我只想为这段代码编写一个单元测试:
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的更好方法?
非常感谢
答案 0 :(得分:0)
如果thisMethodIWantToTest)(
不需要SomeObjectThatTheSuperClassNeed
来实现其目的,您甚至可以将其从MyClass
分离到单独的类型。 - >如果一个类型需要另一种类型,只是为了它的创建,但不需要它来实现其目的,那么它的设计就很糟糕。
如果thisMethodIWantToTest
需要SomeObjectThatTheSuperClassNeed
,那么它一方面是一个不讨人喜欢的设计,因为它将抽象与实现混合在一起,这使事情变得过于复杂。另一方面,您可以传递真实的实现并对其进行隐式测试(也不是那么好),或者您也可以模拟SomeObjectThatTheSuperClassNeed
并为其他测试用例提供模拟。
但无论如何,如果难以测试某些东西,那么它就是设计缺陷的标志。你要么现在改变它,我认为你不能改变它,或者,我最好的猜测是你去分离到单独的类型......