我在FlexUnit中需要它来测试私有方法。有没有可能通过使用describeType进行反射来完成此操作,或者flexUnit是否有一些内置的工具?我不喜欢人为限制,我无法测试私人功能,它大大降低了灵活性。是的,对我来说测试私有函数是一个很好的设计,所以请不要建议我重构我的代码。为了单元测试我不想打破封装。在Flex中调用私有方法,Actionscript
1
A
回答
6
我99%肯定这是不可能的,我很想知道你为什么要这样做。
您应该基于给定的输入,对给定类的输出进行单元测试,而不管类内发生了什么。只要不改变预期的输出(由单元测试定义),您确实希望允许某人能够更改实现细节。
如果您测试私有方法,则对该类的任何更改都将与单元测试紧密结合。如果有人想重新编写代码以提高可读性,或者进行一些更新以提高性能,那么即使类仍然按照最初设计的那样运行,他们将不得不更新单元测试。
我敢肯定,有些情况下测试私有方法可能是有益的,但我希望在大多数情况下它只是不需要。你不必破坏封装,只是测试你的方法调用给出正确的输出......不管内部代码是什么。
1
您不能使用describeType
。
从Livedocs - flash.utils package:
[...]
注:
describeType()
只显示公共属性和方法,而不会显示 属性和方法私有,在包内部或在自定义名称空间中。[...]
2
只需创建一个名为“单元测试”的公共方法,并调用该方法内的所有单元测试。抛出一个错误,当其中一个出现故障,并从你的测试框架称之为:
try {
myobject.unitTest();
} catch (Exception e) {
//etc.
}
0
当测试的私有方法的冲动是无法抗拒的我只创建一个可测试命名的方法。
在这样的文件中声明命名空间:
package be.xeno.namespaces
{
public namespace testable = "http://www.xeno.be/2015/testable";
}
然后你就可以使用可测试为你想测试这样的方法自定义访问修饰符:
public class Thing1
{
use namespace testable;
public function Thing1()
{
}
testable function testMe() : void
{
}
}
你可以然后通过在测试中使用命名空间访问该修饰符:
public class Thing2
{
use namespace testable;
public function Thing2()
{
var otherThing : Thing1 = new Thing1();
otherThing.testMe();
}
}
真的,虽然我t这意味着你应该将你的功能分解成一个单独的类。
相关问题
- 1. 从JavaScript调用Adobe Flex/ActionScript方法?
- 2. 在Ruby中调用的私有方法
- 3. 私有方法调用另一个私有方法,做对吗?
- 4. 从javascript调用actionscript方法
- 5. 在flex中调用Java方法HttpServletResponse 4
- 6. EasyMock的期望私有方法调用
- 7. Rails ActiveConcern调用私有方法
- 8. 调用抽象类的私有方法
- 9. ActionView的私有方法调用异常
- 10. ActionScript - 私有参数?
- 11. 使用findVirtual调用的方法处理私有方法
- 12. 在Android API中调用私有(未发布)方法
- 13. 为什么在超级上下文中调用私有方法?
- 14. 在方法中调用私有最终变量时出现NullPointerException
- 15. 如何在SurfaceView的Activity中调用包 - 私有方法?
- 16. 调试Flex ActionScript单例程
- 17. 有没有办法在ActionScript中以编程方式添加Flex皮肤?
- 18. Rhino Mocks验证私有方法是从公共方法调用
- 19. 从Ruby的类方法调用私有实例方法
- 20. Python:公共方法调用他们的'兄弟'私有方法
- 21. 从静态方法调用私有方法
- 22. FLEX,Actionscript:我如何调用CustomEvent?
- 23. 调用保留调用堆栈的私有方法
- 24. 测试其调用内部调用私有方法
- 25. Xcode中的私有方法
- 26. ObjC++中的私有方法
- 27. Flex,Actionscript
- 28. 使用私有构造函数和私有静态方法调用类?
- 29. Actionscript:从子类调用超类方法
- 30. 如何从ActionScript调用RemoteObject方法?