Checking for change in value of local variable via reflection
这是我第一次尝试使用反射进行单元测试,我有这个疑问。
1 2 3 4 5 6 7 8 9 10 11 12 | Class Example { public static Map<Something, Something> someMethod() { int temp = -1; //Some implementation which might change the value of temp //depending on other cases if(temp == -1) //Do something and return something else //return null } } |
现在在上面的代码片段中,我可以使用反射获取变量
P.S测试的实际代码并不是那么简单。 我有一种感觉,我不能在不使用反射或powermock的情况下对最后的
你不能像某个方法那样在某个带有反射的事件之后触发的变量上挂钩。您通常在单元测试中执行的操作如下:
如果2.中的动作太多(在这种情况下我会理解你的问题),那么你必须编写更细粒度的单元测试。
此外,如果您想使用JUnit检查局部变量,则表明您的方法实现可能过于复杂,应该拆分,在这种情况下,您可以改进测试,分别使其可测试。
还要看一下问题的答案:在单元测试中使用Reflection是不好的做法吗?
您不能使用反射来访问局部变量的状态。实例变量是,静态变量是,局部变量没有。
另外,正如@platzhirsch所说,反射不允许您将触发器附加到任何类型的变量。这种事情需要某种字节码修改。但是,单元测试不需要触发器。检查前后的数值应该足够了。
我认为你真正的问题在于你的课程并不是为了简化单元测试而设计的。首先,你有一个静态的方法,他们很难"嘲笑"。其次,您尝试测试的逻辑似乎嵌入在方法中。如果(例如)
顺便说一句,在这种情况下,您对"私人"一词的使用会产生误导。大多数Java程序员会将"private"解释为带有
正如其他人所指出的,你不能使用反射来访问局部变量的状态,也不能使用反射来通知你"如果有任何改变"。
但是,您可以在调试器中运行代码(例如,在Eclipse调试器中),并在要监视的任何变量上设置"观察点":
-
http://www.javalobby.org/java/forums/t15216.html
-
http://www.vogella.com/articles/EclipseDebugging/article.html