我建议将随机数生成器嵌入到单独的组件中并将其注入到您的类中.因此,您可以在测试中注入其模拟实例.在我看来,这是最优雅的解决方案.您也可以使用反射做一些技巧并覆盖在类体内创建的随机生成器,但不建议这样做.
是的,有:使用种子randoms.
您应该为您的类添加一个额外的包私有构造函数,允许该类为其随机取种子.在那个构造函数中,而不是写
random = new Random();
Run Code Online (Sandbox Code Playgroud)
写
random = new Random(seed);
Run Code Online (Sandbox Code Playgroud)
初始化私有字段random.通过使用种子创建Random,可以从种子初始化Random的内部状态.由于Random实际上不是随机的,而是伪随机数生成器,它将其下一个返回值基于当前状态,通过设置初始状态,您可以确定地设置一系列对Random调用返回的数字序列.
在您的测试代码中,Foo使用这个特殊的包 - 私有测试构造函数而不是默认构造函数初始化类型的新对象,并且每当您测试的类每次都获得相同的伪随机数序列时,只要传入相同的种子时间.
| 归档时间: |
|
| 查看次数: |
2414 次 |
| 最近记录: |