diff --git a/tests/unittests/embunit/embUnit/TestRunner.c b/tests/unittests/embunit/embUnit/TestRunner.c
index 0698185e30af695ee4faac32775c8cd517916bed..20915dd4511f506b1dd52fea036128d6fbda137c 100644
--- a/tests/unittests/embunit/embUnit/TestRunner.c
+++ b/tests/unittests/embunit/embUnit/TestRunner.c
@@ -41,6 +41,7 @@
 
 static TestResult result_;
 static Test* root_;
+int TestRunnerHadErrors;
 
 static void TestRunner_startTest(TestListner* self,Test* test)
 {
@@ -73,6 +74,8 @@ static void TestRunner_addFailure(TestListner* self,Test* test,char* msg,int lin
 	}
 	stdimpl_print(msg);
 	stdimpl_print("\n");
+
+	TestRunnerHadErrors = 1;
 }
 
 static const TestListnerImplement TestRunnerImplement = {
@@ -107,6 +110,8 @@ void TestRunner_end(void)
 		stdimpl_itoa(result_.failureCount, buf, 10);
 		stdimpl_print(buf);
 		stdimpl_print("\n");
+
+		TestRunnerHadErrors = 1;
 	} else {
 		stdimpl_print("\nOK (");
 		stdimpl_itoa(result_.runCount, buf, 10);
diff --git a/tests/unittests/embunit/embUnit/TestRunner.h b/tests/unittests/embunit/embUnit/TestRunner.h
index f709f7491f5ba33781e682c447cb05a41637f142..74152c9569c465a97f07250fb9f30ffeaacf347f 100644
--- a/tests/unittests/embunit/embUnit/TestRunner.h
+++ b/tests/unittests/embunit/embUnit/TestRunner.h
@@ -43,6 +43,8 @@ void TestRunner_start(void);
 void TestRunner_runTest(Test* test);
 void TestRunner_end(void);
 
+extern int TestRunnerHadErrors;
+
 #ifdef	__cplusplus
 }
 #endif
diff --git a/tests/unittests/main.c b/tests/unittests/main.c
index 469c8be378096bcd34150d42d9b89efaa1943d23..8b851fc418de1f3017b493ef5cfc635832be15b2 100644
--- a/tests/unittests/main.c
+++ b/tests/unittests/main.c
@@ -58,6 +58,11 @@ int main(void)
     /* put test TEST_RUN() calls here */
     TESTS_END();
 
+#if defined (BOARD_NATIVE) && !defined (OUTPUT)
+    void _exit(int);
+    _exit(TestRunnerHadErrors);
+#endif
+
     lpm_set(LPM_POWERDOWN);
 
     return 0;