diff --git a/test/test-functions.sh b/test/test-functions.sh
new file mode 100644
index 0000000..96fa9a7
--- /dev/null
+++ b/test/test-functions.sh
@@ -0,0 +1,12 @@
+FILE=$1
+
+assert_num_funcs() {
+	local num_funcs=$(nm $FILE | grep -i " t " | wc -l)
+
+	if [[ $num_funcs != $1 ]]; then
+		echo "$FILE: assertion failed: file has $num_funcs funcs, expected $1" 1>&2
+		exit 1
+	fi
+
+	return 0
+}
diff --git a/test/unit/Makefile.include b/test/unit/Makefile.include
index 5146b23..44a42f7 100644
--- a/test/unit/Makefile.include
+++ b/test/unit/Makefile.include
@@ -11,10 +11,12 @@ MUTE_PASS := >/dev/null
 MUTE_FAIL := >/dev/null 2>&1
 endif
 
-SRC_PATH ?= $(realpath ../../../)
-CDO      ?= $(SRC_PATH)/kpatch-build/create-diff-object
+SRC_PATH        ?= $(realpath ../../../)
+CDO             ?= $(SRC_PATH)/kpatch-build/create-diff-object
+TEST_LIBRARY    ?= $(SRC_PATH)/test/test-functions.sh
 
-TENV = PARA_STRUCT_SIZE=16 EX_STRUCT_SIZE=12 BUG_STRUCT_SIZE=12 ALT_STRUCT_SIZE=13
+CDO_ENV  = PARA_STRUCT_SIZE=16 EX_STRUCT_SIZE=12 BUG_STRUCT_SIZE=12 ALT_STRUCT_SIZE=13
+TEST_ENV = KPATCH_TEST_LIBRARY=$(TEST_LIBRARY)
 
 TARGETS      = $(patsubst %.$(EXT_ORIG),%.$(EXT_OUTPUT),$(wildcard *.$(EXT_ORIG)))
 TEST_TARGETS = $(patsubst %.$(EXT_TEST),%.$(EXT_TEST_OUTPUT),$(wildcard *.$(EXT_TEST)))
@@ -41,21 +43,21 @@ all: $(TARGETS) $(TEST_TARGETS)
 clean:
 	rm -f *.$(EXT_TEST_OUTPUT) *.$(EXT_OUTPUT)
 
-%.$(EXT_TEST_OUTPUT): %.$(EXT_OUTPUT) %.$(EXT_TEST)
-	bash $(@:.$(EXT_TEST_OUTPUT)=.$(EXT_TEST)) $<
+%.$(EXT_TEST_OUTPUT): %.$(EXT_OUTPUT) %.$(EXT_TEST) $(TEST_LIBRARY)
+	$(TEST_ENV) bash $(@:.$(EXT_TEST_OUTPUT)=.$(EXT_TEST)) $<
 # Don't rely on script creating this
 	@touch $@
 
 %.$(EXT_OUTPUT): %.$(EXT_ORIG) %.$(EXT_PATCHED) $(CDO)
 	$(call check_all,$(TNAME).$(EXT_ORIG))
 	$(call check_all,$(TNAME).$(EXT_PATCHED))
-	$(TENV) $(CDO) $(TNAME).$(EXT_ORIG) $(TNAME).$(EXT_PATCHED) \
+	$(CDO_ENV) $(CDO) $(TNAME).$(EXT_ORIG) $(TNAME).$(EXT_PATCHED) \
 		$(TNAME).$(EXT_ORIG) $@ /dev/null test_$(TNAME) $(MUTE_PASS)
 
 %.$(EXT_OUTPUT): %.$(EXT_ORIG) %.$(EXT_FAIL) $(CDO)
 	$(call check_all,$(TNAME).$(EXT_ORIG))
 	$(call check_all,$(TNAME).$(EXT_FAIL))
-	! $(TENV) $(CDO) $(TNAME).$(EXT_ORIG) $(TNAME).$(EXT_FAIL) \
+	! $(CDO_ENV) $(CDO) $(TNAME).$(EXT_ORIG) $(TNAME).$(EXT_FAIL) \
 		$(TNAME).$(EXT_ORIG) $@ /dev/null test_$(TNAME) $(MUTE_FAIL)
 # Expecting to fail, thus create output file manually so we won't rerun the
 # test without clean
diff --git a/test/unit/x86_64/bug-table-section.test b/test/unit/x86_64/bug-table-section.test
index a1e77d0..3071c8e 100755
--- a/test/unit/x86_64/bug-table-section.test
+++ b/test/unit/x86_64/bug-table-section.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 1 ]] || exit 1
-
-exit 0
+assert_num_funcs 1
diff --git a/test/unit/x86_64/convert-global-local.test b/test/unit/x86_64/convert-global-local.test
index 0e615ff..935a653 100755
--- a/test/unit/x86_64/convert-global-local.test
+++ b/test/unit/x86_64/convert-global-local.test
@@ -1,9 +1,9 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
+
+assert_num_funcs 1
 
 bind=$(nm $1 |awk '/__kmalloc/ {print $2}')
 [[ $bind = 't' ]] || exit 1
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-[[ $num_funcs = 1 ]] || exit 1
-
 exit 0
diff --git a/test/unit/x86_64/data-new.test b/test/unit/x86_64/data-new.test
index a1e77d0..3071c8e 100755
--- a/test/unit/x86_64/data-new.test
+++ b/test/unit/x86_64/data-new.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 1 ]] || exit 1
-
-exit 0
+assert_num_funcs 1
diff --git a/test/unit/x86_64/data-read-mostly.test b/test/unit/x86_64/data-read-mostly.test
index a1e77d0..3071c8e 100755
--- a/test/unit/x86_64/data-read-mostly.test
+++ b/test/unit/x86_64/data-read-mostly.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 1 ]] || exit 1
-
-exit 0
+assert_num_funcs 1
diff --git a/test/unit/x86_64/fixup-section.test b/test/unit/x86_64/fixup-section.test
index a1e77d0..3071c8e 100755
--- a/test/unit/x86_64/fixup-section.test
+++ b/test/unit/x86_64/fixup-section.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 1 ]] || exit 1
-
-exit 0
+assert_num_funcs 1
diff --git a/test/unit/x86_64/function-ptr-new.test b/test/unit/x86_64/function-ptr-new.test
index 1b98059..feb62a1 100755
--- a/test/unit/x86_64/function-ptr-new.test
+++ b/test/unit/x86_64/function-ptr-new.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 2 ]] || exit 1
-
-exit 0
+assert_num_funcs 2
diff --git a/test/unit/x86_64/gcc-constprop.test b/test/unit/x86_64/gcc-constprop.test
index a1e77d0..3071c8e 100755
--- a/test/unit/x86_64/gcc-constprop.test
+++ b/test/unit/x86_64/gcc-constprop.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 1 ]] || exit 1
-
-exit 0
+assert_num_funcs 1
diff --git a/test/unit/x86_64/gcc-static-local-var-3.test b/test/unit/x86_64/gcc-static-local-var-3.test
index 1b98059..feb62a1 100755
--- a/test/unit/x86_64/gcc-static-local-var-3.test
+++ b/test/unit/x86_64/gcc-static-local-var-3.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 2 ]] || exit 1
-
-exit 0
+assert_num_funcs 2
diff --git a/test/unit/x86_64/gcc-static-local-var-5.test b/test/unit/x86_64/gcc-static-local-var-5.test
index 91d0c50..2b445a2 100755
--- a/test/unit/x86_64/gcc-static-local-var-5.test
+++ b/test/unit/x86_64/gcc-static-local-var-5.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 5 ]] || exit 1
-
-exit 0
+assert_num_funcs 5
diff --git a/test/unit/x86_64/meminfo-string.test b/test/unit/x86_64/meminfo-string.test
index a1e77d0..3071c8e 100755
--- a/test/unit/x86_64/meminfo-string.test
+++ b/test/unit/x86_64/meminfo-string.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 1 ]] || exit 1
-
-exit 0
+assert_num_funcs 1
diff --git a/test/unit/x86_64/new-function.test b/test/unit/x86_64/new-function.test
index 1b98059..feb62a1 100755
--- a/test/unit/x86_64/new-function.test
+++ b/test/unit/x86_64/new-function.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 2 ]] || exit 1
-
-exit 0
+assert_num_funcs 2
diff --git a/test/unit/x86_64/replace-section-references.test b/test/unit/x86_64/replace-section-references.test
index a1e77d0..3071c8e 100755
--- a/test/unit/x86_64/replace-section-references.test
+++ b/test/unit/x86_64/replace-section-references.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 1 ]] || exit 1
-
-exit 0
+assert_num_funcs 1
diff --git a/test/unit/x86_64/smp-locks-section.test b/test/unit/x86_64/smp-locks-section.test
index a1e77d0..3071c8e 100755
--- a/test/unit/x86_64/smp-locks-section.test
+++ b/test/unit/x86_64/smp-locks-section.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 1 ]] || exit 1
-
-exit 0
+assert_num_funcs 1
diff --git a/test/unit/x86_64/special-static-2.test b/test/unit/x86_64/special-static-2.test
index 1b98059..feb62a1 100755
--- a/test/unit/x86_64/special-static-2.test
+++ b/test/unit/x86_64/special-static-2.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 2 ]] || exit 1
-
-exit 0
+assert_num_funcs 2
diff --git a/test/unit/x86_64/special-static.test b/test/unit/x86_64/special-static.test
index 1b98059..feb62a1 100755
--- a/test/unit/x86_64/special-static.test
+++ b/test/unit/x86_64/special-static.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 2 ]] || exit 1
-
-exit 0
+assert_num_funcs 2
diff --git a/test/unit/x86_64/tracepoints-section.test b/test/unit/x86_64/tracepoints-section.test
index a1e77d0..3071c8e 100755
--- a/test/unit/x86_64/tracepoints-section.test
+++ b/test/unit/x86_64/tracepoints-section.test
@@ -1,7 +1,4 @@
 #!/bin/bash
+source $KPATCH_TEST_LIBRARY
 
-num_funcs=$(nm $1 | grep -i " t " | wc -l)
-
-[[ $num_funcs = 1 ]] || exit 1
-
-exit 0
+assert_num_funcs 1