How to use should_stub method of org.mockitousage.customization.BDDMockitoTest class

Best Mockito code snippet using org.mockitousage.customization.BDDMockitoTest.should_stub

copy

Full Screen

...24public class BDDMockitoTest extends TestBase {25 @Mock26 IMethods mock;27 @Test28 public void should_stub() throws Exception {29 BDDMockito.given(mock.simpleMethod("foo")).willReturn("bar");30 Assertions.assertThat(mock.simpleMethod("foo")).isEqualTo("bar");31 Assertions.assertThat(mock.simpleMethod("whatever")).isEqualTo(null);32 }33 @Test34 public void should_stub_with_throwable() throws Exception {35 BDDMockito.given(mock.simpleMethod("foo")).willThrow(new BDDMockitoTest.SomethingWasWrong());36 try {37 Assertions.assertThat(mock.simpleMethod("foo")).isEqualTo("foo");38 Assert.fail();39 } catch (BDDMockitoTest.SomethingWasWrong expected) {40 }41 }42 @Test43 public void should_stub_with_throwable_class() throws Exception {44 BDDMockito.given(mock.simpleMethod("foo")).willThrow(BDDMockitoTest.SomethingWasWrong.class);45 try {46 Assertions.assertThat(mock.simpleMethod("foo")).isEqualTo("foo");47 Assert.fail();48 } catch (BDDMockitoTest.SomethingWasWrong expected) {49 }50 }51 @Test52 @SuppressWarnings("unchecked")53 public void should_stub_with_throwable_classes() throws Exception {54 /​/​ unavoidable 'unchecked generic array creation' warning (from JDK7 onward)55 BDDMockito.given(mock.simpleMethod("foo")).willThrow(BDDMockitoTest.SomethingWasWrong.class, BDDMockitoTest.AnotherThingWasWrong.class);56 try {57 Assertions.assertThat(mock.simpleMethod("foo")).isEqualTo("foo");58 Assert.fail();59 } catch (BDDMockitoTest.SomethingWasWrong expected) {60 }61 }62 @Test63 public void should_stub_with_answer() throws Exception {64 BDDMockito.given(mock.simpleMethod(ArgumentMatchers.anyString())).willAnswer(new Answer<String>() {65 public String answer(InvocationOnMock invocation) throws Throwable {66 return invocation.getArgument(0);67 }68 });69 Assertions.assertThat(mock.simpleMethod("foo")).isEqualTo("foo");70 }71 @Test72 public void should_stub_with_will_answer_alias() throws Exception {73 BDDMockito.given(mock.simpleMethod(ArgumentMatchers.anyString())).will(new Answer<String>() {74 public String answer(InvocationOnMock invocation) throws Throwable {75 return invocation.getArgument(0);76 }77 });78 Assertions.assertThat(mock.simpleMethod("foo")).isEqualTo("foo");79 }80 @Test81 public void should_stub_consecutively() throws Exception {82 BDDMockito.given(mock.simpleMethod(ArgumentMatchers.anyString())).willReturn("foo").willReturn("bar");83 Assertions.assertThat(mock.simpleMethod("whatever")).isEqualTo("foo");84 Assertions.assertThat(mock.simpleMethod("whatever")).isEqualTo("bar");85 }86 @Test87 public void should_return_consecutively() throws Exception {88 BDDMockito.given(mock.objectReturningMethodNoArgs()).willReturn("foo", "bar", 12L, new byte[0]);89 Assertions.assertThat(mock.objectReturningMethodNoArgs()).isEqualTo("foo");90 Assertions.assertThat(mock.objectReturningMethodNoArgs()).isEqualTo("bar");91 Assertions.assertThat(mock.objectReturningMethodNoArgs()).isEqualTo(12L);92 Assertions.assertThat(mock.objectReturningMethodNoArgs()).isEqualTo(new byte[0]);93 }94 @Test95 public void should_stub_consecutively_with_call_real_method() throws Exception {96 MethodsImpl mock = Mockito.mock(MethodsImpl.class);97 BDDMockito.willReturn("foo").willCallRealMethod().given(mock).simpleMethod();98 Assertions.assertThat(mock.simpleMethod()).isEqualTo("foo");99 Assertions.assertThat(mock.simpleMethod()).isEqualTo(null);100 }101 @Test102 public void should_stub_void() throws Exception {103 BDDMockito.willThrow(new BDDMockitoTest.SomethingWasWrong()).given(mock).voidMethod();104 try {105 mock.voidMethod();106 Assert.fail();107 } catch (BDDMockitoTest.SomethingWasWrong expected) {108 }109 }110 @Test111 public void should_stub_void_with_exception_class() throws Exception {112 BDDMockito.willThrow(BDDMockitoTest.SomethingWasWrong.class).given(mock).voidMethod();113 try {114 mock.voidMethod();115 Assert.fail();116 } catch (BDDMockitoTest.SomethingWasWrong expected) {117 }118 }119 @Test120 @SuppressWarnings("unchecked")121 public void should_stub_void_with_exception_classes() throws Exception {122 BDDMockito.willThrow(BDDMockitoTest.SomethingWasWrong.class, BDDMockitoTest.AnotherThingWasWrong.class).given(mock).voidMethod();123 try {124 mock.voidMethod();125 Assert.fail();126 } catch (BDDMockitoTest.SomethingWasWrong expected) {127 }128 }129 @Test130 public void should_stub_void_consecutively() throws Exception {131 BDDMockito.willDoNothing().willThrow(new BDDMockitoTest.SomethingWasWrong()).given(mock).voidMethod();132 mock.voidMethod();133 try {134 mock.voidMethod();135 Assert.fail();136 } catch (BDDMockitoTest.SomethingWasWrong expected) {137 }138 }139 @Test140 public void should_stub_void_consecutively_with_exception_class() throws Exception {141 BDDMockito.willDoNothing().willThrow(BDDMockitoTest.SomethingWasWrong.class).given(mock).voidMethod();142 mock.voidMethod();143 try {144 mock.voidMethod();145 Assert.fail();146 } catch (BDDMockitoTest.SomethingWasWrong expected) {147 }148 }149 @Test150 public void should_stub_using_do_return_style() throws Exception {151 BDDMockito.willReturn("foo").given(mock).simpleMethod("bar");152 Assertions.assertThat(mock.simpleMethod("boooo")).isEqualTo(null);153 Assertions.assertThat(mock.simpleMethod("bar")).isEqualTo("foo");154 }155 @Test156 public void should_stub_using_do_answer_style() throws Exception {157 BDDMockito.willAnswer(new Answer<String>() {158 public String answer(InvocationOnMock invocation) throws Throwable {159 return invocation.getArgument(0);160 }161 }).given(mock).simpleMethod(ArgumentMatchers.anyString());162 Assertions.assertThat(mock.simpleMethod("foo")).isEqualTo("foo");163 }164 @Test165 public void should_stub_by_delegating_to_real_method() throws Exception {166 /​/​ given167 BDDMockitoTest.Dog dog = Mockito.mock(BDDMockitoTest.Dog.class);168 /​/​ when169 BDDMockito.willCallRealMethod().given(dog).bark();170 /​/​ then171 Assertions.assertThat(dog.bark()).isEqualTo("woof");172 }173 @Test174 public void should_stub_by_delegating_to_real_method_using_typical_stubbing_syntax() throws Exception {175 /​/​ given176 BDDMockitoTest.Dog dog = Mockito.mock(BDDMockitoTest.Dog.class);177 /​/​ when178 BDDMockito.given(dog.bark()).willCallRealMethod();179 /​/​ then180 Assertions.assertThat(dog.bark()).isEqualTo("woof");181 }182 @Test183 public void should_all_stubbed_mock_reference_access() throws Exception {184 Set<?> expectedMock = Mockito.mock(Set.class);185 Set<?> returnedMock = BDDMockito.given(expectedMock.isEmpty()).willReturn(false).getMock();186 Assertions.assertThat(returnedMock).isEqualTo(expectedMock);187 }188 @Test(expected = NotAMockException.class)...

Full Screen

Full Screen

StackOverFlow community discussions

Questions
Discussion

Mocking Logger and LoggerFactory with PowerMock and Mockito

PowerMock access private members

Mockito with Java async-&gt;sync converter

How to mock void methods with Mockito

Mockito - when thenReturn

Mockito - 0 Matchers Expected, 1 Recorded (InvalidUseOfMatchersException)

What is the difference between mocking and spying when using Mockito?

reason: no instance(s) of type variable(s) T exist so that void conforms to using mockito

Maven: compiling and testing on different source levels

Mockito isA(Class&lt;T&gt; clazz) How to resolve type safety?

EDIT 2020-09-21: Since 3.4.0, Mockito supports mocking static methods, API is still incubating and is likely to change, in particular around stubbing and verification. It requires the mockito-inline artifact. And you don't need to prepare the test or use any specific runner. All you need to do is :

@Test
public void name() {
    try (MockedStatic<LoggerFactory> integerMock = mockStatic(LoggerFactory.class)) {
        final Logger logger = mock(Logger.class);
        integerMock.when(() -> LoggerFactory.getLogger(any(Class.class))).thenReturn(logger);
        new Controller().log();
        verify(logger).warn(any());
    }
}

The two inportant aspect in this code, is that you need to scope when the static mock applies, i.e. within this try block. And you need to call the stubbing and verification api from the MockedStatic object.


@Mick, try to prepare the owner of the static field too, eg :

@PrepareForTest({GoodbyeController.class, LoggerFactory.class})

EDIT1 : I just crafted a small example. First the controller :

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Controller {
    Logger logger = LoggerFactory.getLogger(Controller.class);

    public void log() { logger.warn("yup"); }
}

Then the test :

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.verify;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Controller.class, LoggerFactory.class})
public class ControllerTest {

    @Test
    public void name() throws Exception {
        mockStatic(LoggerFactory.class);
        Logger logger = mock(Logger.class);
        when(LoggerFactory.getLogger(any(Class.class))).thenReturn(logger);
        
        new Controller().log();
        
        verify(logger).warn(anyString());
    }
}

Note the imports ! Noteworthy libs in the classpath : Mockito, PowerMock, JUnit, logback-core, logback-clasic, slf4j


EDIT2 : As it seems to be a popular question, I'd like to point out that if these log messages are that important and require to be tested, i.e. they are feature / business part of the system then introducing a real dependency that make clear theses logs are features would be a so much better in the whole system design, instead of relying on static code of a standard and technical classes of a logger.

For this matter I would recommend to craft something like= a Reporter class with methods such as reportIncorrectUseOfYAndZForActionX or reportProgressStartedForActionX. This would have the benefit of making the feature visible for anyone reading the code. But it will also help to achieve tests, change the implementations details of this particular feature.

Hence you wouldn't need static mocking tools like PowerMock. In my opinion static code can be fine, but as soon as the test demands to verify or to mock static behavior it is necessary to refactor and introduce clear dependencies.

https://stackoverflow.com/questions/8948916/mocking-logger-and-loggerfactory-with-powermock-and-mockito

Blogs

Check out the latest blogs from LambdaTest on this topic:

Complete Guide To Styling Forms With CSS Accent Color

The web paradigm has changed considerably over the last few years. Web 2.0, a term coined way back in 1999, was one of the pivotal moments in the history of the Internet. UGC (User Generated Content), ease of use, and interoperability for the end-users were the key pillars of Web 2.0. Consumers who were only consuming content up till now started creating different forms of content (e.g., text, audio, video, etc.).

New Year Resolutions Of Every Website Tester In 2020

Were you able to work upon your resolutions for 2019? I may sound comical here but my 2019 resolution being a web developer was to take a leap into web testing in my free time. Why? So I could understand the release cycles from a tester’s perspective. I wanted to wear their shoes and see the SDLC from their eyes. I also thought that it would help me groom myself better as an all-round IT professional.

How To Choose The Right Mobile App Testing Tools

Did you know that according to Statista, the number of smartphone users will reach 18.22 billion by 2025? Let’s face it, digital transformation is skyrocketing and will continue to do so. This swamps the mobile app development market with various options and gives rise to the need for the best mobile app testing tools

Running Tests In Cypress With GitHub Actions [Complete Guide]

In today’s tech world, where speed is the key to modern software development, we should aim to get quick feedback on the impact of any change, and that is where CI/CD comes in place.

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Mockito automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in BDDMockitoTest

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful