From: Steve F. <sm...@us...> - 2003-06-26 17:33:31
|
Update of /cvsroot/mockobjects/mockobjects-java/src/examples/com/mockobjects/examples/random In directory sc8-pr-cvs1:/tmp/cvs-serv19482/src/examples/com/mockobjects/examples/random Added Files: Tag: Nat_reworks_dynamics_from_0_09 WeatherRandomTest.java DefaultWeatherRandom.java StubRandom.java Weather.java WeatherTest.java WeatherRandom.java Log Message: Further changes from Nat --- NEW FILE: WeatherRandomTest.java --- package com.mockobjects.examples.random; import junit.framework.TestCase; public class WeatherRandomTest extends TestCase { public WeatherRandomTest(String test) { super(test); } public void testNextIsRaining() { StubRandom random = new StubRandom(); WeatherRandom weather_random = new DefaultWeatherRandom(random); random.setNextDouble( 0.0 ); assertTrue( "is raining", weather_random.nextIsRaining() ); random.setNextDouble( DefaultWeatherRandom.CHANCE_OF_RAIN ); assertTrue( "is not raining", !weather_random.nextIsRaining() ); random.setNextDouble( 1.0 ); assertTrue( "is not raining", !weather_random.nextIsRaining() ); } public void testNextTemperature() { StubRandom random = new StubRandom(); WeatherRandom weather_random = new DefaultWeatherRandom(random); random.setNextDouble( 0.0 ); assertEquals( "should be min temperature", DefaultWeatherRandom.MIN_TEMPERATURE, weather_random.nextTemperature(), 0.0 ); random.setNextDouble( 0.5 ); assertEquals( "should be average temperature", 0.5*(DefaultWeatherRandom.MIN_TEMPERATURE + DefaultWeatherRandom.MAX_TEMPERATURE), weather_random.nextTemperature(), 0.0 ); random.setNextDouble( 1.0 ); assertEquals( "should be max temperature", DefaultWeatherRandom.MAX_TEMPERATURE, weather_random.nextTemperature(), 0.0 ); } } --- NEW FILE: DefaultWeatherRandom.java --- package com.mockobjects.examples.random; import java.util.Random; public class DefaultWeatherRandom implements WeatherRandom { static final double CHANCE_OF_RAIN = 0.2; static final double MIN_TEMPERATURE = 20; static final double MAX_TEMPERATURE = 30; static final double TEMPERATURE_RANGE = (MAX_TEMPERATURE-MIN_TEMPERATURE); private Random _rng; public DefaultWeatherRandom( Random rng ) { _rng = rng; } public boolean nextIsRaining() { return _rng.nextDouble() < CHANCE_OF_RAIN; } public double nextTemperature() { return MIN_TEMPERATURE + _rng.nextDouble() * TEMPERATURE_RANGE; } } --- NEW FILE: StubRandom.java --- package com.mockobjects.examples.random; import java.util.Random; /** Random is a class, not an interface, and so cannot be mocked using the * {@link com.mockobjects.dynamic.Mock} class. However, by creating the * domain-specific interface to random behaviour (the {@link WeatherRandom} * interface, our use of Random objects becomes so simple that our tests * don't need a mock Random class, only this trivial stub. */ public class StubRandom extends Random { private double nextDouble = 0.0; public void setNextDouble( double d ) { nextDouble = d; } public double nextDouble() { return nextDouble; } } --- NEW FILE: Weather.java --- package com.mockobjects.examples.random; import java.util.Random; public class Weather { private WeatherRandom random; private boolean isRaining = false; private double temperature = 0.0; public Weather( WeatherRandom random ) { this.random= random; } public boolean isRaining() { return isRaining; } public double getTemperature() { return temperature; } public void randomize() { temperature = random.nextTemperature(); isRaining = random.nextIsRaining(); if( isRaining ) temperature *= 0.5; } } --- NEW FILE: WeatherTest.java --- package com.mockobjects.examples.random; import com.mockobjects.dynamic.Mock; import junit.framework.TestCase; public class WeatherTest extends TestCase { public WeatherTest( String test ) { super(test); } public void testSunnyWeather() { final double TEMPERATURE = 20; Mock random = new Mock(WeatherRandom.class); random.expectAndReturn( "nextIsRaining", false ); random.expectAndReturn( "nextTemperature", TEMPERATURE ); Weather weather = new Weather( (WeatherRandom)random.proxy() ); weather.randomize(); assertTrue( "is not raining", !weather.isRaining() ); assertEquals( "temperature", TEMPERATURE, weather.getTemperature(), 0.0 ); } public void testWetWeather() { final double TEMPERATURE = 20; Mock random = new Mock(WeatherRandom.class); random.expectAndReturn( "nextIsRaining", true ); random.expectAndReturn( "nextTemperature", TEMPERATURE ); Weather weather = new Weather( (WeatherRandom)random.proxy() ); weather.randomize(); assertTrue( "is raining", weather.isRaining() ); assertEquals( "temperature", TEMPERATURE/2.0, weather.getTemperature(), 0.0 ); } } --- NEW FILE: WeatherRandom.java --- package com.mockobjects.examples.random; public interface WeatherRandom { boolean nextIsRaining(); double nextTemperature(); } |