请输入您要查询的百科知识:

 

词条 Mockito
释义

  1. Features

  2. Origins

      Example  

  3. See also

  4. References

  5. External links

{{Technical|date=February 2010}}

Mockito is an open source testing framework for Java released under the MIT License.[1][2] The framework allows the creation of test double objects (mock objects) in automated unit tests for the purpose of test-driven development (TDD) or behavior-driven development (BDD).

The framework's name and logo are a play on mojitos, a type of drink.

Features

Mockito allows developers to verify the behavior of the system under test (SUT) without establishing expectations beforehand.[3] One of the criticisms of mock objects is that there is a tight coupling of the test code to the system under test.[4] Mockito attempts to eliminate the expect-run-verify pattern[5] by removing the specification of expectations. Mockito also provides some annotations for reducing boilerplate code.[6]

Origins

Mockito began by expanding on the syntax and functionality of EasyMock.[7][8]

Example

Consider this decoupled Hello world program; we may unit test some of its parts, using mock objects for other parts.

package org.examples;

import java.io.IOException;

public class HelloApplication {

   public static interface Greeter {      String getGreeting(String subject);      String getIntroduction(String actor);   }      public static class HelloGreeter implements Greeter {      private String hello;      private String segmenter;            public HelloGreeter(String hello, String segmenter) {         this.hello = hello;         this.segmenter = segmenter;      }      public String getGreeting(String subject) {         return hello + " " + subject;       }      public String getIntroduction(String actor) {         return actor+segmenter;      }   }      public static interface HelloActable {      void sayHello(String actor, String subject) throws IOException;   }      public static class HelloAction implements HelloActable {      private Greeter helloGreeter;      private Appendable helloWriter;
      public HelloAction(Greeter helloGreeter, Appendable helloWriter) {         super();         this.helloGreeter = helloGreeter;         this.helloWriter = helloWriter;      }      public void sayHello(String actor, String subject) throws IOException {          helloWriter.append(helloGreeter.getIntroduction(actor)).append(helloGreeter.getGreeting(subject));      }   }
   public static void main(String... args) throws IOException {      new HelloAction(new HelloGreeter("hello", ": "), System.out).sayHello("application", "world");   }

}

The result of HelloApplication launching will be the following:

application: hello world

Unit test for HelloActable component may look like this:

package org.examples;

import static org.mockito.Matchers.any;

import static org.mockito.Matchers.eq;

import static org.mockito.Mockito.mock;

import static org.mockito.Mockito.times;

import static org.mockito.Mockito.verify;

import static org.mockito.Mockito.when;

import org.junit.Before;

import org.junit.Test;

import org.examples.HelloApplication.HelloActable;

import org.examples.HelloApplication.HelloAction;

import org.examples.HelloApplication.Greeter;

public class HelloActionUnitTest {

      Greeter helloGreeterMock;   Appendable helloWriterMock;   HelloActable helloAction;      @Before   public void setUp() {      helloGreeterMock = mock(Greeter.class);      helloWriterMock = mock(Appendable.class);      helloAction = new HelloAction(helloGreeterMock, helloWriterMock);   }      @Test   public void testSayHello() throws Exception {      when(helloWriterMock.append(any(String.class))).thenReturn(helloWriterMock);      when(helloGreeterMock.getIntroduction(eq("unitTest"))).thenReturn("unitTest : ");      when(helloGreeterMock.getGreeting(eq("world"))).thenReturn("hi world");            helloAction.sayHello("unitTest", "world");            verify(helloGreeterMock).getIntroduction(eq("unitTest"));      verify(helloGreeterMock).getGreeting(eq("world"));
      verify(helloWriterMock, times(2)).append(any(String.class));      verify(helloWriterMock, times(1)).append(eq("unitTest : "));      verify(helloWriterMock, times(1)).append(eq("hi world"));   }

}

It uses mock objects for the Greeter and Appendable interfaces, and implicitly assumes the next use case:

unitTest : hi world

Integration test code for testing HelloActable wired together with Greeter may look like the following:

package org.examples;

import static org.mockito.Matchers.any;

import static org.mockito.Matchers.eq;

import static org.mockito.Mockito.mock;

import static org.mockito.Mockito.times;

import static org.mockito.Mockito.verify;

import static org.mockito.Mockito.when;

import org.junit.Before;

import org.junit.Test;

import org.examples.HelloApplication.HelloActable;

import org.examples.HelloApplication.HelloAction;

import org.examples.HelloApplication.Greeter;

import org.examples.HelloApplication.HelloGreeter;

public class HelloActionIntegrationTest {

   HelloActable helloAction;   Greeter helloGreeter;   Appendable helloWriterMock;      @Before   public void setUp() {      helloGreeter = new HelloGreeter("welcome", " says ");      helloWriterMock = mock(Appendable.class);      helloAction = new HelloAction(helloGreeter, helloWriterMock);   }      @Test   public void testSayHello() throws Exception {      when(helloWriterMock.append(any(String.class))).thenReturn(helloWriterMock);
      verify(helloWriterMock, times(2)).append(any(String.class));      verify(helloWriterMock, times(1)).append(eq("integrationTest says "));      verify(helloWriterMock, times(1)).append(eq("welcome universe"));   }

}

It uses mock objects only in place of Appendable interfaces, uses the real implementations for other (HelloActable and Greeter) interfaces, and implicitly assumes the next use case:

integrationTest says welcome universe

As can be seen from the import statements of HelloActionUnitTest and HelloActionIntegrationTest classes, it is necessary to put some Mockito jars and JUnit jars in your class path to be able to compile and run the test classes.

See also

  • Behavior driven development
  • List of unit testing frameworks
  • Software testing

References

1. ^{{cite web |url= http://gojko.net/2009/10/23/mockito-in-six-easy-examples/ |title=Mockito in six easy examples |year=2009 | accessdate=2012-10-05 }}
2. ^{{cite web |url=https://stackoverflow.com/questions/22697/whats-the-best-mock-framework-for-java |title=What's the best mock framework for Java? |accessdate=2010-12-29 }}
3. ^{{cite web |url=https://code.google.com/p/mockito/wiki/FeaturesAndMotivations |title=Features and Motivations |accessdate=2010-12-29 }}
4. ^{{cite web |url=http://martinfowler.com/articles/mocksArentStubs.html#CouplingTestsToImplementations |title=Mocks Aren't Stubs |last=Fowler |first=Martin |year=2007 |accessdate=2010-12-29 }}
5. ^{{cite web |url=http://monkeyisland.pl/2008/02/01/deathwish/ |title=Death Wish |last=Faber |first=Szczepan |accessdate=2010-12-29 }}
6. ^{{cite web|last=Kaczanowski,|first=Tomek |title=Mockito - Open Source Java Mocking Framework|url=http://www.methodsandtools.com/tools/mockito.php| accessdate=2013-09-17}}
7. ^{{cite web |url=http://monkeyisland.pl/2008/01/14/mockito/ |title=Mockito |last=Faber |first=Szczepan |accessdate=2010-12-29 }}
8. ^{{cite web |url=https://code.google.com/p/mockito/ |title=Mockito Home Page |accessdate=2010-12-29 }}

External links

  • {{Official website|http://mockito.org/}}

1 : Unit testing frameworks

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/9/20 5:15:06