diff --git a/README.md b/README.md
index 032df41d0aadf84b2744c813ecf2eec87c851309..eef4c18e655846c90dc1fd8e8cd4912467ac02a0 100644
--- a/README.md
+++ b/README.md
@@ -55,8 +55,20 @@ Time format defaults to `%D{%H:%M}`, but can be overwritten by setting the varia
 VCS theme can be set through the variable `OHMYVIA_VCS_THEME`.
 
 
+Unit testing
+------------
+
+Oh-My-VIA uses [ZUnit](https://github.com/molovo/zunit) as unit testing framework.
+
+To run the tests, just run:
+
+```
+zunit test
+```
+
+
 License
 -------
 
-Unless explicitly stated to the contrary, all contents licensed under the [WTFPL](LICENSE)
+Unless explicitly stated to the contrary, all contents licensed under the [WTFPL](LICENSE).
 
diff --git a/test/utils.zunit b/test/utils.zunit
new file mode 100644
index 0000000000000000000000000000000000000000..6832069f5766c5241e82ec2d1d5fa94988bd65f4
--- /dev/null
+++ b/test/utils.zunit
@@ -0,0 +1,112 @@
+#!/usr/bin/env zunit
+
+@setup {
+	ZUNIT_LIB_DIR='../functions'
+	assert $ZUNIT_LIB_DIR is_dir
+}
+
+@teardown {
+	unset ZUNIT_LIB_DIR
+}
+
+# Testing lib
+
+@test 'Test loading utils.zsh' {
+	assert $ZUNIT_LIB_DIR/utils.zsh is_file
+
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	assert $state equals 0
+}
+
+# Testing set_default function
+
+@test 'Test set_default on non-set variable' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	unset ZUNIT_TEST_VAR
+	set_default ZUNIT_TEST_VAR "default_value"
+	assert $ZUNIT_TEST_VAR same_as "default_value"
+}
+
+@test 'Test set_default on already-set variable' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	ZUNIT_TEST_VAR="test_value"
+	set_default ZUNIT_TEST_VAR "default_value"
+	assert $ZUNIT_TEST_VAR same_as "test_value"
+	assert $ZUNIT_TEST_VAR different_to "default_value"
+}
+
+@test 'Test set_default on /_COLOR$/ variable' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	set_default       ZUNIT_TEST_VAR_COLOR         "default_value"
+	set_default_color ZUNIT_TEST_VAR_COLOR_WITNESS "default_value"
+	assert $ZUNIT_TEST_VAR_COLOR same_as $ZUNIT_TEST_VAR_COLOR_WITNESS
+}
+
+@test 'Test set_default on /_COLOR_.*$/ variable' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	set_default       ZUNIT_TEST_COLOR_VAR         "default_value"
+	set_default_color ZUNIT_TEST_COLOR_VAR_WITNESS "default_value"
+	assert $ZUNIT_TEST_COLOR_VAR same_as $ZUNIT_TEST_COLOR_VAR_WITNESS
+}
+
+@test 'Test set_default on /_COLOR[^_].*$/ variable' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	set_default ZUNIT_TEST_COLORVAR "default_value"
+	assert $ZUNIT_TEST_COLORVAR same_as "default_value"
+}
+
+# Testing set_default_color function
+
+@test 'Test set_default_color on non-set variable with visual effect, first style' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	set_default_color ZUNIT_TEST_VAR "%F{red}"
+	assert $ZUNIT_TEST_VAR same_as "%F{red}"
+}
+
+@test 'Test set_default_color on non-set variable with visual effect, second style' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	set_default_color ZUNIT_TEST_VAR "%{$fg[red]%}"
+	assert $ZUNIT_TEST_VAR same_as "%{$fg[red]%}"
+}
+
+@test 'Test set_default_color on non-set variable with color' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	set_default_color ZUNIT_TEST_VAR "red"
+	assert $ZUNIT_TEST_VAR same_as "%F{red}"
+}
+
+@test 'Test set_default_color on already-set variable with visual effect, first style' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	ZUNIT_TEST_VAR="%F{red}"
+	set_default_color ZUNIT_TEST_VAR "green"
+	assert $ZUNIT_TEST_VAR same_as "%F{red}"
+}
+
+@test 'Test set_default_color on already-set variable with visual effect, second style' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	ZUNIT_TEST_VAR="%{$fg[red]%}"
+	set_default_color ZUNIT_TEST_VAR "green"
+	assert $ZUNIT_TEST_VAR same_as "%{$fg[red]%}"
+}
+
+@test 'Test set_default_color on already-set variable with color' {
+	load $ZUNIT_LIB_DIR/utils.zsh
+
+	ZUNIT_TEST_VAR="red"
+	set_default_color ZUNIT_TEST_VAR "green"
+	assert $ZUNIT_TEST_VAR same_as "%F{red}"
+}
+
+# vim: ft=zsh fenc=utf-8
+