Junit Testing Tips - Constructor Is Called Earlier Executing Exam Methods

Advertisement

Masukkan script iklan 970x90px

Junit Testing Tips - Constructor Is Called Earlier Executing Exam Methods

Sabtu, 28 Maret 2020

Even though nigh all Java programmers either job JUnit or TestNG for in that place unit of measurement testing require along amongst about mock object generation libraries e.g. Mockito, but non everyone spends fourth dimension as well as attempt to larn subtle details of these testing libraries, at to the lowest degree non inwards proportion of whatever pop framework like vending auto implementation every bit a coding exercise. If y'all facial expression at closely, I accept initialized vending auto inwards the shape body, which is executed every bit role of the constructor.

I was assuming 1 instance of the vending auto is shared betwixt all assay methods, every bit I was non using @Before as well as @After, JUnit iv annotation for setup() as well as tearDown().

In the starting fourth dimension test, 1 item from Inventory is consumed as well as inwards minute assay about other item, but when y'all assert count of items based upon the previous test, it volition fail, because y'all are testing a unlike vending auto instance, which has unlike inventory.

So always, cry back that JUnit calls the constructor of assay shape earlier executing the assay method. You tin verify it past times putting a System.out.println message inwards the constructor itself. Btw, if y'all are but starting amongst JUnit or accept used it quite a long ago, as well as thus I advise y'all to starting fourth dimension refresh your concepts past times going through JUnit as well as Mockito Crash Course

 Even though nigh all Java programmers either job  JUnit Testing Tips - Constructor is Called Before Executing Test Methods


JUnit has already come upwards a long means amongst enhancements inwards JUnit 4.0 as well as JUnit 5.0, the latest unloose of JUnit.



Code Written inwards Constructor is Executed earlier each Test Method

 Even though nigh all Java programmers either job  JUnit Testing Tips - Constructor is Called Before Executing Test Methodsa constructor.

In the output section, y'all tin meet that message from constructor has appeared 2 times, 1 for each assay case. This proves that the constructor of JUnit assay class is executed earlier each assay method.


import java.util.List;
import org.junit.Test;
import static org.junit.Assert.;

/**
  *
  * @author Javin
  */
public class VendingMachineTest {
    private VendingMachine auto = new VendingMachine();
  
    public VendingMachineTest(){
        System.out.println("JUnit Framework calls Constructor of assay shape earlier executing assay methods");
    }

    @Test
    public void buyDrinkWithExactAmount(){
        int cost = machine.choose(Item.COKE);
        assertEquals(70, price);
        assertEquals(Item.COKE, machine.currentItem);
      
        machine.insert(Coin.QUARTER);
        machine.insert(Coin.QUARTER);
        machine.insert(Coin.DIME);
        machine.insert(Coin.DIME);
        assertEquals(70, machine.balance);
        assertEquals(7, (int) machine.coinInvertory.getCount(Coin.DIME));
        assertEquals(7, (int) machine.coinInvertory.getCount(Coin.QUARTER));
      
        Item i = machine.dispense();
        assertEquals(Item.COKE, i);
        assertEquals(4, (int) machine.itemInvertory.getCount(i));
      
        List modify = machine.getChange();
        assertTrue(change.isEmpty());
      
      
    }
  
    @Test
    public void buyDrinkWithMoreAmount(){
        int cost = machine.choose(Item.SPRITE);
        assertEquals(90, price);
        assertEquals(Item.SPRITE, machine.currentItem);
      
        machine.insert(Coin.QUARTER);
        machine.insert(Coin.QUARTER);
        machine.insert(Coin.QUARTER);
        machine.insert(Coin.QUARTER);
      
        assertEquals(100, machine.balance);
        assertEquals(9, (int) machine.coinInvertory.getCount(Coin.QUARTER));
      
        Item i = machine.dispense();
        assertEquals(Item.SPRITE, i);
        assertEquals(4, machine.itemInvertory.getCount(i));

        //this was failing, because past times default VM initialize inventory amongst five items
        assertEquals(4, machine.itemInvertory.getCount(Item.COKE));

      
        List modify = machine.getChange();
        assertEquals(1, change.size());
        assertEquals(Coin.DIME, change.get(0));
        assertEquals(4, machine.coinInvertory.getCount(Coin.DIME));
             
    }

Output:
Testsuite: test.VendingMachineTest
JUnit Framework calls Constructor of assay class before executing assay methods
JUnit Framework calls Constructor of assay class before executing assay methods
Tests run: 2, Failures: 1, Errors: 0, Time elapsed: 1.421 sec

Result
------------- ---------------- ---------------
Testcase: buyDrinkWithMoreAmount(test.VendingMachineTest):      FAILED
expected:<4> but was:<5>
junit.framework.AssertionFailedError: expected:<4> but was:<5>
        at test.VendingMachineTest.buyDrinkWithMoreAmount(VendingMachineTest.java:63)

That's all guys. I experience this is a worth knowing exceptional if y'all are using JUnit for writing unit of measurement assay inwards your Java project. Sometimes, nosotros accept a põrnikas inwards unit of measurement assay itself, but nosotros suspect our code. So it must for all Java developers to know the nitty-gritty of JUnit testing framework every bit well.

Further Learning
Unit Testing In Java With JUnit
JUnit as well as Mockito Crash Course
Learn Unit Testing amongst JUnit & Mockito inwards thirty Steps

Thanks for reading this article thus far. If y'all similar this JUnit tips as well as thus delight portion amongst your friends as well as colleagues. If y'all accept whatever questions or feedback as well as thus delight drib a note.