Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何使用Junit对随机字符串生成器进行单元测试?_Kotlin_Junit - Fatal编程技术网

Kotlin 如何使用Junit对随机字符串生成器进行单元测试?

Kotlin 如何使用Junit对随机字符串生成器进行单元测试?,kotlin,junit,Kotlin,Junit,我的问题简单明了 假设我有一个函数,它返回一个随机字符串 fun generateRandomId(): String { val randomString = UUID.randomUUID().toString().replace("-", "") return randomString } 我想用JUnit测试上面的函数 @Test fun generateRandomId() { Assertions.assertEqua

我的问题简单明了

假设我有一个函数,它返回一个随机字符串

fun generateRandomId(): String {
    val randomString = UUID.randomUUID().toString().replace("-", "")
    return randomString
}
我想用JUnit测试上面的函数

@Test
fun generateRandomId() {
    Assertions.assertEquals()
}
不确定如何断言随机生成的字符串没有任何“-”

assertFalse(generateRandomId().contains(“-”)

对原问题的先前答复: 如果函数使用另一个类生成随机字符串,则将该另一个类注入类的构造函数中:

class MyClass(someOtherClass:someOtherClass){
fun generateRandomId():字符串{
val randomString=someOtherClass.generateRandom()
返回随机字符串
}
}
在您的测试中,您模拟SomeOtherClass,您需要做的就是检查SomeOtherClass返回的内容是否在您的函数中返回

@测试
有趣的TestGeneratorDomain(){
//给定
val someOtherClassMock:SomeOtherClass=mock()//1
val myClass=myClass(someOtherClassMock)//2
val randomString=“randomString”
每当(someOtherClassMock.generateRandom()).thenReturn(randomString)//3
//什么时候
val result=myClass.generateRandomId()
//然后
assertEquals(随机字符串、结果)
}
1和3:使用首选的模拟框架/模拟实现模拟其他类的行为

1和2:这些行通常位于测试类的设置方法中



现在,如果不使用外部类生成随机字符串,则必须粘贴代码以获得进一步帮助。

它怎么可能不是字符串?在任何情况下,如果要测试返回类型,请检查该类型。但是,它只能返回
字符串
,因此这似乎没有意义——Kotlin是静态类型的。@DaveNewton是的,我想我应该测试返回类型。我同意,对于像Kotlin这样的静态类型语言,不需要进行此测试,但我打算对该文件进行100%的测试。@DaveNewton我现在更新了这个问题,使其更有趣。测试返回类型就是测试Kotlin语言本身。这不是单元测试的重点,它对您的测试套件没有任何价值。要检查它是随机的:调用它两次,并断言结果不同?我确实考虑过它。但随机数的生成是通过一个静态函数完成的。所以,在这种情况下,我真的不能嘲笑任何东西。我当然可以用包装纸。但我希望有一个解决方案,JUnit可以做一些类似assertString()的事情。对于这种情况,我建议使用包装器,但您可以使用模拟静态方法的模拟框架,我不推荐使用这种方法。有关更多信息,请查看