我正在使用C#2.0和Nunit Test.我有一些需要序列化的对象.这些对象非常复杂(在不同级别继承并包含许多对象,事件和委托).
如何创建单元测试以确保我的对象可以安全地序列化?
我发现Object class在java中,当我浪费了很多时间来解决问题时,java中的序列化不可用.
那么任何人都可以知道另一个类是不可序列化的,或者是否有任何方法来检查该类是否可序列化?
我正在使用Java EE JMS队列.我正在将对象发送到队列中,然后使用MDB接收它们.当将消息体(使用getBody())读入对象时,我得到以下异常:
javax.jms.MessageFormatException: Body not assignable to class ...
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以从中获得更具描述性的错误,这将告诉为什么它不可分配?我也尝试进入调试模式,看看哪种消息对象到达MDB但是我已经看到它被序列化,所以它并没有真正有用.
在将对象类型发送到队列之前,可以在调试器中正确识别它.
附加信息:如果我手动创建一个空对象并发送它,则可以正确识别它.生产对象来自REST端点,包含许多属性,并在此过程中进行了多次转换.某些数据必须阻止分配,但逐步调试每个属性将是一种痛苦,并且只是作为最后的手段.
对于如何在Java中测试类正确实现Serializable(不仅仅是Serializable的实例)的每个答案,对象都被确认为可序列化的
对象发送方式为:
jmsContext.createProducer().send(queue, object);
我设法通过将所有属性设置为null然后逐个评论它直到它工作来缩小范围.事实证明,持续时间类型属性不正确?初始化导致问题.在另一种情况下,导致它的是XMLGregorianCalendar属性.尽管如此,这是一种非常hacky的调试方式,我仍然不知道为什么分配失败,我只知道哪个属性导致它.
暂时我最终将实体ID传递到队列而不是完整对象,我通过ID从数据库中检索它们.
完整stacktrace的Pastebin:http://pastebin.com/vWvhDTcr
在我们最新的应用程序版本中,我们看到了一些kotlin.NoWhenBranchMatchedException报告给Fabric / Crashlytics的消息。
这是有问题的代码段:
private lateinit var welcome: Welcome
// ...
welcome.welcomeStateLoginStatus.let {
val handled = when (it) {
UnknownUser -> {
btn_login.visibility = View.VISIBLE
btn_logout.visibility = View.GONE
secondButtonFocusedInfoText = getString(R.string.welcome_login_button_info)
tv_user_description.text = null
}
is InternalUser -> {
btn_login.visibility = View.GONE
btn_logout.visibility = View.VISIBLE
secondButtonFocusedInfoText = "Logout"
tv_user_description.text = "Logged in as internal user"
}
ExternalUser -> {
btn_login.visibility = View.GONE
btn_logout.visibility = View.VISIBLE
secondButtonFocusedInfoText = "Logout"
tv_user_description.text = "Logged in as external user"
}
}
} …Run Code Online (Sandbox Code Playgroud) 我已经看到了这个:如何在java中测试一个类正确地实现了可序列化
我只是有一个更普遍的问题.如果你创建一个这样的对象(比如一个圆圈)(假设有进口):
class Circle implements Serializable {
int radius;
Circle(int radius){
this.radius = radius;
}
public void updateRadius(int radius){
this.radius = radius
}
public int getRadius(){
return radius;
}
}
Run Code Online (Sandbox Code Playgroud)
它是否需要可序列化所需的全部内容?我是否需要添加更多方法才能正确序列化?我有一个更复杂的课程,但是当这应该提供充足的例子时,并不想发布所有的课程.