跨平台的RandomGenerator的Spring初始化

时间:2013-01-10 13:53:40

标签: spring ubuntu windows-7 random

我在两个不同平台(Win7和Ubuntu PP)上的Spring3应用程序上运行JUnit测试。 为了测试/再现性目的,我在我的应用程序上下文中设置了随机生成器的种子

<bean class="org.apache.commons.math3.random.MersenneTwister">
        <property name="seed" value="1111111" />
</bean>

现在这个测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( { Config.APP_CONFIG_PATH })
public class StatTestAtomicInitOut {

@Autowired 
RandomGenerator rg;

@Test
public void testRandomGenerator() {

    Assert.assertEquals(9183, rg.nextInt(10000));

}

}

在Windows7中持续传递,但在Ubuntu PP上一直失败(java.lang.AssertionError:expected:&lt; 9183&gt;但是:&lt; 9561&gt;)。

这个其他测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( { Config.APP_CONFIG_PATH })
public class StatTestAtomicInitIn {

 @Autowired 
 RandomGenerator rg;

 @Test
 public void testRandomGenerator() {

    rg.setSeed(new Long(1111111));
    Assert.assertEquals(9183, rg.nextInt(10000));

 }

}

在Windows7和Ubuntu PP上都一致地传递。

为什么在Ubuntu上(而不是在Win7上)对随机生成器进行Spring初始化会产生与在运行时设置种子时获得的结果不同的结果?

提前感谢您的任何反馈。

AA

1 个答案:

答案 0 :(得分:0)

使用此配置

<bean class="org.apache.commons.math3.random.MersenneTwister">  
    <constructor-arg type="long" value="1111111" />
</bean>

测试在两个平台上传递。 感谢汤姆麦金太尔让我走上正轨。 另一种可能性是

<bean class="org.apache.commons.math3.random.MersenneTwister">
    <property name="seed" >
        <value type="long">1111111</value>
    </property>
</bean>

测试通过。

为什么Spring在不同平台上选择不同的默认设置器这个有点学术性的问题仍然没有答案。奇怪的是,至少对我来说,使用以下配置

<bean class="org.apache.commons.math3.random.MersenneTwister">
    <property name="seed" >
        <value type="java.lang.Long">1111111</value>
    </property>
</bean>

StatTestAtomicInitOut传递win7,但在Ubuntu上失败。