JUnit如何测试这些小型序列化和json函数?在Android中,Java
我已经学会了如何在Android中进行基本的单元测试,例如获取和设置下面的方法等。但是当涉及到更复杂的事情,比如下面的实际代码时,我有点不知所措JUnit如何测试这些小型序列化和json函数?在Android中,Java,java,android,json,android-activity,junit,Java,Android,Json,Android Activity,Junit,我已经学会了如何在Android中进行基本的单元测试,例如获取和设置下面的方法等。但是当涉及到更复杂的事情,比如下面的实际代码时,我有点不知所措 public class SurveyTest extends TestCase { private Survey survey; protected void setUp() throws Exception { super.setUp(); survey = new Survey(); } public void
public class SurveyTest extends TestCase {
private Survey survey;
protected void setUp() throws Exception {
super.setUp();
survey = new Survey();
}
public void testGetId() {
long expected = (long) Math.random();
survey.setId(expected);
long actual = survey.getId();
Assert.assertEquals(expected, actual);
}
public void testGetTitle() {
String expected = "surveytitle";
survey.setTitle(expected);
String actual = survey.getTitle();
Assert.assertEquals(expected, actual);
}
我的小代码被困在如何以上述格式进行Junit测试上:
public abstract class PrimaryModel extends Observable implements Serializable{
protected void notifyModelChange()
{
setChanged();
notifyObservers();
}
public String serialize() throws IOException
{
ObjectOutputStream objOutStream = null;
ByteArrayOutputStream bytArrOutStream = null;
try
{
bytArrOutStream = new ByteArrayOutputStream();
objOutStream = new ObjectOutputStream(bytArrOutStream);
objOutStream.writeObject(this);
}
finally
{
String main = new String(bytArrOutStream.toByteArray());
objOutStream.close();
bytArrOutStream.close();
return main;
}
}
public static PrimaryModel deserialize(String data) throws IOException, ClassNotFoundException
{
ObjectInputStream objInputStream = new ObjectInputStream(new ByteArrayInputStream(data.getBytes()));
PrimaryModel obj = (PrimaryModel) objInputStream.readObject();
objInputStream.close();
return obj;
}
}
像序列化/反序列化方法对这样的东西通常很容易测试。您需要知道往返返回的对象与原始对象等效
private static class PrimaryModelSubclass extends PrimaryModel {
/* add methods as needed */
}
final PrimaryModel original = new PrimaryModelSubclass(7, "some string", 43.7);
final PrimaryModel wellTravelled = PrimaryModel.deserialize(original.serialize());
assertEquals(original, wellTravelled);
您还需要正确定义hashCode和equals方法
更新以响应返回错误的评论,PrimaryModel是抽象的;无法实例化。另外,非静态方法序列化;无法从静态上下文中引用。请参阅内联更改。您需要一些具体的子类,我不应该将serialize()作为静态方法调用。