如何以惯用方式使用JUnit4来测试某些代码是否会抛出异常?
虽然我当然可以这样做:
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
Run Code Online (Sandbox Code Playgroud)
我记得有一个注释或一个Assert.xyz或者其他东西,对于这些类型的情况来说,远不如KUndgy 和JUnit的精神.
似乎无法弄清楚这一点.我在GSON中尝试JSON树操作,但我有一个案例,我不知道或有一个POJO转换为字符串,在转换之前JsonObject
.有没有办法直接从a String
到JsonObject
?
我尝试了以下(Scala语法):
val gson = (new GsonBuilder).create
val a: JsonObject = gson.toJsonTree("""{ "a": "A", "b": true }""").getAsJsonObject
val b: JsonObject = gson.fromJson("""{ "a": "A", "b": true }""", classOf[JsonObject])
Run Code Online (Sandbox Code Playgroud)
但a
失败了,JSON被转义并解析为JsonString
唯一,并
b
返回一个空JsonObject
.
有任何想法吗?
如何在Java中验证JSON字符串?或者我可以使用正则表达式解析它吗?
今天热议:
文本流是否null
有效JSON?
根据http://www.ietf.org/rfc/rfc4627.txt?number=4627:
......
2. JSON语法JSON文本是一系列标记.标记集包括六个结构字符,字符串,数字和三个文字名称.
JSON文本是序列化对象或数组.
这是否应解释为两个语句必须为true才能使文本有效JSON?
但是,许多其他库似乎允许它,事实上,似乎单个有效令牌可能是合法的结果.
有明确的答案吗?
假设我使用Google的Gson库将JSON解析为Java数据结构.
如果存在没有相应JSON的Java字段,是否有一种简单的方法可以抛出异常?也就是说,我希望JSON拥有Java结构中的所有字段.
我正在使用GSON来验证JSON格式的字符串:
String json="{'hashkey':{'calculatedHMAC':'f7b5addd27a221b216068cddb9abf1f06b3c0e1c','secretkey':'12345'},operation':'read','attributes':['name','id'],'otid':'12'}";
Gson gson=new Gson();
Response resp = new Response();
RequestParameters para = null;
try{
para = gson.fromJson(json, RequestParameters.class);
}catch(Exception e){
System.out.println("invalid json format");
}
Run Code Online (Sandbox Code Playgroud)
它做得很好但是当我删除下面的引号时,我已经从hashkey中删除了:
"{hashkey':{'calculatedHMAC':'f7b5addd27a221b216068cddb9abf1f06b3c0e1c','secretkey':'12345'},operation':'read','attributes':['name','id'],'otid':'12'}"
Run Code Online (Sandbox Code Playgroud)
它仍然将它验证为正确的JSON格式,并且不会抛出任何异常而不会进入catch体.这样做的原因是什么?我该如何解决这个问题?
RequestParameters类:
public class RequestParameters {
HashKey hashkey;
String operation;
int count;
int otid;
String[] attributes;
}
Run Code Online (Sandbox Code Playgroud)