[JAVA] Mockito Argument null Der Annahme-Test hat den Typ angegeben und nicht zurückgegeben

Während meiner Arbeit bei JUnit, als ich ein Framework namens Mockito als eine Art Scheinobjekt verwendete, gab es nicht die erwartete Ausgabe zurück und es schmolz einen halben Tag lang, also machte ich mir eine Notiz.

↓ Mockito-Einführungsstelle. Wie man Mockito trinkt

Annahme

Wenn Sie beispielsweise ein Muster testen möchten, in dem null in das Argument der Methode "getContent" der Controller-Klasse </ b> in der folgenden Quelle eingegeben wird. (Der Code wird von der obigen Site zitiert und geändert.)

getContent ist eine Methode, die getContentById der darin enthaltenen Service-Klasse verwendet. Wenn Sie jedoch nur die Logik direkt unter getContent testen möchten, müssen Sie sich keine Gedanken über die Logik in getContentById machen. Verwenden Sie daher Mockito, um E / A anzugeben, die nicht von der Logik in "getContentById" abhängen, und führen Sie für jede Klasse einen unabhängigen Test durch.

Controller.java


  public class Controller
  {
      private Service service = new Service();

      public String getContent(String id) {
          String content = service.getContentById(id);
          return content;
      }
  }

Service.java


  public class Service
  { 
     private Map contents = new HashMap();
  
     //Konstrukteur
     public Service(){ genContents(); }

     //Geben Sie den Schlüssel und den Rückgabewert an
     public String getContentById(String id) {
          String content;
          content = contents.get(id);
          return content;
     }

     //Inhalte erstellen
     public void genContents() {
          contents.put("1","Tanaka");
          contents.put("2","Saitou");
          contents.put("3","Yoshida");
          contents.put("4","Suzuki");
     }
   }

Der folgende Fehlcode

  public class Test{
     Controller controller = new Controller();

     //Machen Sie einen Dummy-Service, ich kenne den Inhalt nicht
     Service service = mock(Service.class);
     // I/Nur O wird separat eingestellt
     doReturn("Content1").when(service).getContentById(Mockito.anyString());
}

Anweisungen, die mit "doReturn" beginnen

"Geben Sie die Zeichenfolge Content1 zurück, wenn sie mit einem Int-Typ als Argument aufgerufen wird."

In dieser Annahme wird jedoch anyString () nicht angegeben, da das Argument von "getContentId" null ist, und getContent gibt nichts zurück. Daher werden wir ein breiteres Argument spezifizieren.

Korrigieren Sie den Code unten

     doReturn("Content1").when(service).getContentById(Mockito.any());

Jetzt in der Methode getContentById

"Geben Sie die Zeichenfolge Content1 zurück, wenn Sie aufgerufen werden, da alles in Ordnung ist."

Sie können die Einstellung hinzufügen. Ich konnte es verschieben, auch wenn das Argument null war.

Im eigentlichen Geschäft habe ich "ArgumentMatchers.any (~~~ .class)" anstelle von "Mockito.Any ~ ()" verwendet, um die Methode mit meinem eigenen Typargument zu verspotten, aber diesmal Ich habe versucht, es einfacher mit einem String-Muster zu schreiben.

Nachtrag

Recommended Posts

Mockito Argument null Der Annahme-Test hat den Typ angegeben und nicht zurückgegeben
Optionale Typkonvertierung und Rückgabewert (Nullunterstützung)
null gibt den Typ an
java.util.Optional class und null und nicht null