12637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin/*
22637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * Copyright (c) 2007 Mockito contributors
32637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * This program is made available under the terms of the MIT License.
42637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin */
52637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpackage org.mockitousage.misuse;
62637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
72637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.junit.Test;
82637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.exceptions.misusing.WrongTypeOfReturnValue;
92637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.assertj.core.api.Assertions.assertThat;
112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.junit.Assert.fail;
122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.Mockito.*;
132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpublic class SpyStubbingMisuseTest {
152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Test
172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public void nestedWhenTest() {
182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Strategy mfoo = mock(Strategy.class);
192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Sampler mpoo = mock(Sampler.class);
202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Producer out = spy(new Producer(mfoo));
212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        try {
232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            when(out.produce()).thenReturn(mpoo);
242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            fail();
252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        } catch (WrongTypeOfReturnValue e) {
262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            assertThat(e.getMessage()).contains("spy").contains("syntax").contains("doReturn|Throw");
272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        }
282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public class Sample { }
312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public class Strategy {
332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Sample getSample() {
342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            return new Sample();
352637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        }
362637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
372637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
382637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public class Sampler {
392637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Sample sample;
402637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Sampler(Strategy f) {
412637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            sample = f.getSample();
422637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        }
432637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
442637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
452637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public class Producer {
462637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Strategy strategy;
472637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Producer(Strategy f) {
482637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            strategy = f;
492637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        }
502637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        Sampler produce() {
512637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            return new Sampler(strategy);
522637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        }
532637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
542637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin}
55