JUnit-4.12 plugin for repomate
Project description
repomate-junit4, a JUnit 4.12 test runner plugin for repomate
This is a plugin for repomate that runs JUnit4 test classes on production classes in a cloned student repo.
Requirements
repomate-junit4 has a few non-Python dependencies.
javamust ba available from the command line.javacmust be available from the command line.- In other words, install a
JDKversion that is compatible with the files you intend to test!
- In other words, install a
junit-4.12.jarmust be available on theCLASSPATHvariable, or configured (see Added CLI arguments and Configuration file).hamcrest-core-1.3.jarmust be available on theCLASSPATHvariable or configured in order to make use ofhamcrestmatchers.
The hamcrest and junit jars ar available from Maven Central:
wget http://central.maven.org/maven2/junit/junit/4.12/junit-4.12.jar
wget http://central.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
Install
The recommended way to install repomate-junit4 is with pip.
python3 -m pip install --user repomate-junit4
The plugin itself does not actually require repomate, but it is fairly
useless without. If repomate and repomate-junit4 are both installed in the
same environment, then repomate should just find repomate-junit4.
For repomate to actually use repomate-junit4, it must be configured
in the repomate configuration file. Refer to the
repomate docs
for information on the configuration file and its expected location, and the
Configuration file section here for info on what you
need to add to it.
Usage
Terminology and conventions
This is terminology added in excess to that which is defined in the repomate
docs.
For brevity, some conventions expected by repomate-junit4 are baked into
these definitions.
- Production class: A Java file/class written in the student repo.
- Test file: A file ending in
Test.javawhich contains a test class for some production class. If the students are supposed to write a file calledLinkedList.java, the corresponding test class must be calledLinkedListTest.java. - Test dir: A directory named after a master repo, containing tests for student repos based on that master repo. Should contain test files as defined above.
- Reference tests directory (RTD): A local directory containing subdirectories with reference tests. Each subdirectory should be a test dir as defined above.
Security aspects
There are some inconvenient security implications to running untrusted code on
your own computer. repomate-junit4 tries to limit what a student's code can
do by running with a very strict JVM
Security Policy.
This is enforced by the Java
SecurityManager.
The policy used looks like this:
// empty grant to strip all permissions from all codebases
grant {
};
// the `junit-4.12.jar` needs this permission for introspection
grant codeBase "file:{junit4_jar_path}" {{
permission java.lang.RuntimePermission "accessDeclaredMembers";
}};
"""
This policy disallows student code from doing most illicit things, such as
accessing files outside of the codebases's directory, or accessing the network.
The {junit4_jar_path} is dynamically resolved during runtime, and will lend
the actual junit-4.12.jar archive that is used to run the test classes
sufficient permissions to do so.
This policy seems to work well for introductory courses in Java, but there may
be snags because of how restrictive it is. If you find that some permission
should definitely be added, please
open an issue about it
There are plans to add the ability to specify a custom security policy, but
currently, your only choice is to either use this default policy or disable it
with --disable-security.
Important: The security policy relies on the correctness of the Java SecurityManager. It is probably not bulletproof, so if you have strict security requirements, you should probably only run this plugin inside of a properly secured environment (for example, a virtual machine).
Added CLI arguments
repomate-junit4 adds four new CLI arguments to the repomate clone command.
-rtd|--reference-tests-dir- Path to the RTD.
- Required unless specified in the configuration file.
-junit|--junit-path- Path to the
junit-4.12.jarlibrary. - Required unless specified on the
CLASSPATHvariable, or in the configuration file.
- Path to the
-ham|--hamcrest-path- Path to the
hamcrest-core-1.3.jarlibrary. - Required unless specified on the
CLASSPATHvariable, or in the configuration file.
- Path to the
-i|--ignore-tests- A whitespace separated list of test files (e.g.
LinkedListTest.java) to ignore. This is useful for example if there are abstract test classes in the test dir.
- A whitespace separated list of test files (e.g.
--disable-security- Disable the seurity policy.
-v|--verbose- Display more verbose information (currently only concerns test failures).
- Long lines are truncated.
-vv|--very-verbose- Same as
-v, but without truncation.
- Same as
Configuration file
First and foremost, junit4 must be added to the plugins option under the
[DEFAULTS] section in order to activate the plugin,
see details here.
The --hamcrest-path, --junit-path and --reference-tests-dir arguments can
be configured in the standard
repomate configuration file
by adding the [junit4] section heading. Example:
[DEFAULTS]
plugins = junit4
[junit4]
reference_tests_dir = /absolute/path/to/rtd
junit_path = /absolute/path/to/junit-4.12.jar
hamcrest_path = /absolute/path/to/hamcrest-core-1.3.jar
Important: All of the paths in the config must be absolute for
repomate-junit4to behave as expected.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file repomate-junit4-0.5.0.tar.gz.
File metadata
- Download URL: repomate-junit4-0.5.0.tar.gz
- Upload date:
- Size: 13.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0be2053cc533182a11b6cd5a7c41e983687e615ecffd4625a00432a2185e4de1
|
|
| MD5 |
a75c1ebe1994ec65f400254c75f862ec
|
|
| BLAKE2b-256 |
64626ad3dcba0f4f9d9f76d835b2d3e5fc28b062bd5336c97935a15e04554a3d
|
File details
Details for the file repomate_junit4-0.5.0-py3-none-any.whl.
File metadata
- Download URL: repomate_junit4-0.5.0-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79ce2ddfa77bd7fbdc3e8b23bf34555bc6050bda3114a1ac95d4cd938a5b4956
|
|
| MD5 |
0257cfcb486ac6584764c867fe550467
|
|
| BLAKE2b-256 |
e5bd4c2031d25b119106938011189c869e83e48b9b9641859566a34646c0c20d
|