Worksheet: J0 | CS 2113 Software Engineering - Fall 2024

Worksheet: J0

Worksheets are self-guided activities that reinforce lectures. They are due Thursdays the week they are assigned.

Setup

Create a new repo using all the steps in Lab 0 called yourgitusername-worksheet-J0. Then, add the following file to it:

Download the UnitTestExample.java

Download the Junit jar file from the pinned post on Ed. Save it in the same directory as your java file (preserving the name junit-platform-console-standalone-1.7.0-M1.jar). This will allow you to run Junit tests through your terminal; there are also plugins for junit for text editors like VSCode if you want to google how to set that up.

Download the CS1111_checks.xml into the same directory.

Download the checkstyle-9.2.1-all.jar into the same directory.

Understanding unit tests

We will use unit tests throughout the semester to test your code; while we’ll learn about them more formally later in the semester, the goal of this assignment is to make sure you’re familiar enough with the basics. In addition, we sometimes use unit tests in an unusual way, to pipe the output of running main into a string that we compare to an expected output.

Open the UnitTestExample.java file, and take a look at the three tests. The first one is comparing Earth to Earth, and should pass. The second one is comparing Moon to moon, and will fail because the two strings are not equal.

The third test is running the Java Checkstyle command from the command line, and making sure that it reports no warnings. Right now, it also fails, because the file it is checking – UnitTestExample.java – doesn’t have good coding style. We’ll fix that and get it to pass in a minute.

Running unit tests

To run your unit tests – remember, two of them will fail for now – compile and run your code with the following commands on the terminal (depending on your OS):

Windows:
javac -classpath ".;junit-platform-console-standalone-1.7.0-M1.jar" UnitTestExample.java
java -classpath ".;junit-platform-console-standalone-1.7.0-M1.jar" org.junit.runner.JUnitCore UnitTestExample

Mac/Linux:
javac -classpath ".:junit-platform-console-standalone-1.7.0-M1.jar" UnitTestExample.java
java -classpath ".:junit-platform-console-standalone-1.7.0-M1.jar" org.junit.runner.JUnitCore UnitTestExample

Your output should look something like:

JUnit version 4.13
..E.Starting audit...[WARN] C:\Users\Dr_Kinga\Documents\CS2113_S23\cs2113-s23.github.io\wrkshts\UnitTestExample.java:7:25: Member name 'n' must match pattern '^[a-z][a-z0-9][a-zA-Z0-9]*$'. [MemberName]Audit done.
E
Time: 2.406
There were 2 failures:
1) test2(UnitTestExample)
org.junit.ComparisonFailure: expected:<[M]oon> but was:<[m]oon>
        at org.junit.Assert.assertEquals(Assert.java:117)
        at org.junit.Assert.assertEquals(Assert.java:146)
        at UnitTestExample.test2(UnitTestExample.java:22)
2) test3(UnitTestExample)
org.junit.ComparisonFailure: expected:<Starting audit...[]Audit done.> but was:<Starting audit...[[WARN] C:\Users\Dr_Kinga\Documents\CS2113_S23\cs2113-s23.github.io\wrkshts\UnitTestExample.java:7:25: Member name 'n' must match pattern '^[a-z][a-z0-9][a-zA-Z0-9]*$'. [MemberName]]Audit done.>
        at org.junit.Assert.assertEquals(Assert.java:117)
        at org.junit.Assert.assertEquals(Assert.java:146)
        at UnitTestExample.test3(UnitTestExample.java:50)

FAILURES!!!
Tests run: 3,  Failures: 2

Getting tests to pass

Next, modify your java file to 1) change the variable name n on line 7 to be something better so it passes the style checker; and 2) change the value of the variable satellite on line 9 so that it passes the test case. Looking at line 20 will show you what the expected value is for that second test case. Then, recompile and re-run your tests using the commands above.

When all your tests pass, you should see something like:

JUnit version 4.13
...Starting audit...Audit done.

Time: 0.918

OK (3 tests)

Please reach out to a TA for help if you need it.

Grading rubric and submission

Create a tar file with your code by running the following command in the terminal:
tar -cvf J0.tar UnitTestExample.java

Then, upload this tarfile to the submitserver, and make sure you see 100/100 displayed there.

You will be graded on the following:

Item Points
unit tests pass (33 points each) 100