diff --git a/9. labor/JUnitTest/src/junittest/Calculator.java b/9. labor/JUnitTest/src/junittest/Calculator.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb255674fd653b752c17f6dceeeabf4897ac16cb
--- /dev/null
+++ b/9. labor/JUnitTest/src/junittest/Calculator.java	
@@ -0,0 +1,14 @@
+package junittest;
+
+public class Calculator {
+	public double multiply(double a, double b) {
+		return a * b;
+	}
+	
+	public double divide(double a, double b) throws IllegalArgumentException {
+		if(b == 0) {
+			throw new IllegalArgumentException();
+		}
+		return a / b;
+	}
+} 
diff --git a/9. labor/JUnitTest/test/junittest/CalculatorTest.java b/9. labor/JUnitTest/test/junittest/CalculatorTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..dc63c22445cd0dbe5275a63c012a8e132484e744
--- /dev/null
+++ b/9. labor/JUnitTest/test/junittest/CalculatorTest.java	
@@ -0,0 +1,55 @@
+package junittest;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class CalculatorTest {
+	double a;
+	double b;
+	Calculator calc;
+
+	public CalculatorTest(double a, double b) {
+		this.a = a;
+		this.b = b;
+	}
+
+	@Before
+	public void setUp() {
+		calc = new Calculator();
+	}
+
+	@Test
+	public void testMultiply() {
+		double result = calc.multiply(a, b);
+		Assert.assertEquals(a * b, result, 0);
+	}
+
+	@Test
+	public void testDivide() throws Exception {
+		double result = calc.divide(a, b);
+		Assert.assertEquals(a / b, result, 0);
+	}
+
+	@Test(expected=IllegalArgumentException.class)
+	public void testDivideByZero() throws Exception {
+		calc.divide(a, 0.0);
+	}
+
+	@Parameters
+	public static List<Object[]> parameters() {
+		List<Object[]> params = new ArrayList<>();
+		params.add(new Object[] {0.0, 0.0});
+		params.add(new Object[] {10.0, 0.0});
+		params.add(new Object[] {10.0, 3.0});
+		params.add(new Object[] {20.0, 4.0});
+		params.add(new Object[] {40.0, 5.0});
+		return params;
+	}
+} 
\ No newline at end of file
diff --git a/9. labor/java_9_junit_tutorial.pdf b/9. labor/java_9_junit_tutorial.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..0478eac5546b8c48bfcc95551e3669152a723d2e
Binary files /dev/null and b/9. labor/java_9_junit_tutorial.pdf differ
diff --git a/prog3_a_junit_p1.pdf b/prog3_a_junit_p1.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..b4ebc2be8fbfebd0afaee9c632c1da43705d4ba7
Binary files /dev/null and b/prog3_a_junit_p1.pdf differ