2017-07-25 70 views
0

我有一个方法,它创建一个json对象并返回字符串。 我想就这个功能的单元测试,但该方法返回一个字符串,像这样:斯卡拉测试单元与JSON字符串

{"att1":"{\"scale\": 0, \"significand\": 10}","name":"john","lastname":"smith","job":"developper"} 

如果你复制粘贴此行成逗号,你没有得到的字符串。而且我不能再使用JSON.parseFull(),因为这不是一个String。我不希望我的方法直接返回一个jsonObject。

我用这种对象的创建我的JSON字符串

val objectMapper = new ObjectMapper() 
val myJson= objectMapper.createObjectNode() 
objectMapper.writeValueAsString(myJson) 

而且我用这个代码,使我的单元测试:

class MyJsonTest extends FlatSpec { 

    "My method" should "generate a valid json" in { 

    val myJsonString = getMyJson() //method to test 

    // this is not a valid String but my method return this: 
    val correctJson = "{"att1":"{\"scale\": 0, \"significand\": 10}","name":"john","lastname":"smith","job":"developper"}" 

    assert(correctJson === myJsonString) 

    } 

你有什么想法?

+0

我会说创建的json是无效的,因为结果字符串不应包含转义字符'\'。 使用原始字符串验证json很简单,因为您不必使用转义字符,并且可以执行完全匹配字符串 “”“{”attr1“:{”scale“:0,”significant“:10},”name“:”John“}”“” –

回答

1

你应该使用的“”“YOUR_STRING这里‘’”,采取在考虑你的插值字符串你的“

class test extends FlatSpec { 

    def getSampleJson = """{"att1":"{"scale": 0, "significand": 10}","name":"john","lastname":"smith","job":"developper"}""" 

    "My method" should "generate a valid json" in { 

    val myJsonString = getSampleJson 

    // this is not a valid String but my method return this: 
    val correctJson = 
     s"""{"att1":"{\"scale\": 0, \"significand\": 10}","name":"john","lastname":"smith","job":"developper"}""" 


    println(myJsonString) // {"att1":"{"scale": 0, "significand": 10}","name":"john","lastname":"smith","job":"developper"} 

    println(correctJson) // {"att1":"{"scale": 0, "significand": 10}","name":"john","lastname":"smith","job":"developper"} 

    assert(correctJson === myJsonString) 

    } 
} 

所以,现在,你可以打电话给你的方法的getJSON :)

+0

不错,但是,h你会调用myMethodToTest(),因为:s“”“myMethodToTest()”“”返回字符串:myMethodToTest() –

+0

不,只要做val myJsonString = myMethodToTest() 没有引号&它我会工作:) – elarib

+0

它不工作,因为s“”“删除斜杠,所以我没有相同的字符串。例如: {“att1”:“{”scale“:0,”significantand“:10}”,“name”:“john”,“lastname”:“smith”,“job”:“developper” } –