检查String是否与此String插值匹配

时间:2018-03-21 15:02:46

标签: string scala string-interpolation

我想将字符串内容与字符串插值进行比较。 string interpolation例如是

s"Hello ${name} ,
Your order ${UUID} will be shipped on ${date}."

可以在正则表达式中表达一些约束。

date的格式为2018-03-19T16:14:46.191 + 01:00(+%Y-%m-%dT%H:%M:%S)。

UUID是随机的,并遵循此格式834aa5fd-af26-416d-b715-adca01a866c4。

一种可能的解决方案是检查字符串结果是否包含字符串插值的某些固定部分。

问题

约束:您事先不知道字符串插值中的参数值。

如何检查字符串插值的值?

一般情况下,如果您事先不知道参数值,如何使用String插值测试String比较?

解决方案可以用Java语言提供。 Scala是首选。

1 个答案:

答案 0 :(得分:3)

您可以在测试中定义变量。例如,使用以下函数:

def stringToTest(name: String, UUID: String, date: String): String = {
  s"Hello ${name}, Your order ${UUID} will be shipped on ${date}."
}

您可以编写这样的测试(假设您在测试中使用FlatSpec with Matchers之类的内容):

"my function" should {
  "return the correct string" in {
    val name = "Name"
    val UUID = "834aa5fd-af26-416d-b715-adca01a866c4"
    val date = "2018-03-19T16:14:46.191+01:00"

    stringToTest(name, UUID, date) shouldBe "Hello Name, Your order 834aa5fd-af26-416d-b715-adca01a866c4 will be shipped on 2018-03-19T16:14:46.191+01:00."
  }
}

您应该能够独立测试每个函数,并且能够使用传递给函数的虚拟值而不会出现问题。如果您使用的是真正的随机值(或者想要使测试过于复杂),我想您可以使用正则表达式检查。我找到的最简单的方法就是这样:

"this string" should {
  "match the correct regex" in {
    val regex = "^Hello .*, " +
      "Your order .{8}-.{4}-.{4}-.{4}-.{12} will be shipped on " +
      "\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}\+\d{2}:\d{2}\.$" // whatever

    val thingToCheck = "Hello Name, " +
      "Your order 834aa5fd-af26-416d-b715-adca01a866c4 will be shipped on " +
      "2018-03-19T16:14:46.191+01:00."

    thingToCheck.matches(regex) shouldBe true
  }
}