Skip to content

Instantly share code, notes, and snippets.

@coderunner
Created October 11, 2011 00:09
Show Gist options
  • Select an option

  • Save coderunner/1276930 to your computer and use it in GitHub Desktop.

Select an option

Save coderunner/1276930 to your computer and use it in GitHub Desktop.
expert vs master
public interface Coder
{
public Code writeCodeFor(String[] requirements);
}
public class TestExpertCoder
{
private static final String[] REQUIREMENTS = {"simple requirement"};
private ExpertCoder coder;
private RequirementsImporter requirementsImporter;
private Requirements requirements;
private Requirement requirement;
private DesignDiscussionGenerator designDiscussionGenerator;
private DesignDiscussions discussions;
private DesignDiscussion discussion;
private Problems problems;
private Problem problem;
private DesignPatternFactory designPatternFactory;
private DesignPattern designPattern;
private Code code;
private Object[] allMocks;
@Before
public void setup()
{
requirementsImporter = createStrictMock(RequirementsImporter.class);
requirements = createStrictMock(Requirements.class);
requirement = createStrictMock(Requirement.class);
designDiscussionGenerator =
createStrictMock(DesignDiscussionGenerator.class);
discussions = createStrictMock(DesignDiscussions.class);
discussion = createStrictMock(DesignDiscussion.class);
problems = createStrictMock(Problems.class);
problem = createStrictMock(Problem.class);
designPatternFactory = createStrictMock(DesignPatternFactory.class);
designPattern = createStrictMock(DesignPattern.class);
code = createStrictMock(Code.class);
allMocks = new Object[]{requirementsImporter, requirements, requirement,
designDiscussionGenerator, discussions, discussion, problems,
problem, designPatternFactory, designPattern, code};
coder = new ExpertCoder(requirementsImporter,
designDiscussionGenerator,
designPatternFactory);
}
@Test
public void shouldWriteSimpleCode()
{
reset(allMocks);
expect(requirementsImporter.importRequirements(REQUIREMENTS))
.andReturn(requirements);
expect(requirements.getRequirement(0))
.andReturn(requirement);
expect(designDiscussionGenerator.discussDesign(requirement))
.andReturn(discussions);
expect(discussions.getNextDiscussion()).andReturn(discussion);
expect(discussion.discuss()).andReturn(problems);
expect(problems.getNextProblem()).andReturn(problem);
expect(designPatternFactory.choosePattern(problem))
.andReturn(designPattern);
expect(designPattern.apply()).andReturn(code);
replay(allMocks);
Code code = coder.writeCodeFor(REQUIREMENTS);
verify(allMocks);
assertEquals(Correctness.MINOR_ISSUES, code.getCorrectness());
//TODO FIX THIS!
/*failed-->*/ //assertEquals(Complexity.LOW, code.getComplexity());
/*failed-->*/ //assertEquals(Size.SMALL, code.getCodeSize());
}
}
public class TestMasterCoder
{
private static final String[] REQUIREMENTS = {"simple requirement"};
private MasterCoder coder;
private Task task;
private Task[] tasks;
private Experience experience;
private DesignPrinciples principles;
private Code code;
@Before
public void setup()
{
experience = mock(Experience.class);
principles = mock(DesignPrinciples.class);
code = mock(Code.class);
task = new Task();
tasks = new Task[]{task};
coder = new MasterCoder(principles, experience);
}
@Test
public void shouldWriteSimpleCode()
{
when(experience.breakIntoTasks(REQUIREMENTS)).thenReturn(tasks);
when(principles.apply(task)).thenReturn(code);
Code code = coder.writeCodeFor(REQUIREMENTS);
assertEquals(Complexity.LOW, code.getComplexity());
assertEquals(Correctness.PERFECT, code.getCorrectness());
assertEquals(Size.SMALL, code.getCodeSize());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment