# KUnit Documentation

KUnit is a lightweight unit testing and mocking framework for the Linux kernel.
These tests are able to be run locally on a developer’s workstation without a VM
or special hardware.

KUnit is heavily inspired by JUnit, Python’s unittest.mock, and
Googletest/Googlemock for C++. KUnit defines a way to mock out C style classes
and functions and create expectations on methods called within the code under
test.

This is a repository to host the source for the KUnit documentation.

NOTE: There is an important distinction between KUnit's documentation source and
it's documentation site. As a project meant primarily to serve the development
of the Linux kernel, a significant portion of our code and documentation reside
in the Linux kernel codebase. Consequently, the documentation that does not live
in the Linux kernel follows many of the conventions of the Linux kernel. One of
these conventions is that we use [Sphinx](http://www.sphinx-doc.org) for all of
our documentation. Thus, because Sphinx requires documentation to be compiled
from its source files, we must have a repository for all the Sphinx source files
and a separate repository for all of the generated output files to actually host
the site. This is the repository for the source.

## Where is the code?

<https://kunit.googlesource.com>

## How to build documentation

Documentation can be built by running:

```bash
make html
```

## How to update the documentation

Our documentation is hosted at <https://github.com/google/kunit-docs>. The
documentation may be updated by building the documentation as described above,
and then:

```bash
./deploy.sh
```

You can copy the files over without committing and pushing the files with:

```bash
./deploy.sh --no-commit
```
