提交 96f51e85 编写于 作者: M Mark VanderVoord

Updated method of testing generate_test_runner script to be a FUNCTIONAL test...

Updated method of testing generate_test_runner script to be a FUNCTIONAL test instead of a perfect code match. Backfilled most tests and added some coverage not previously present. Still need to test new command line args and a few cmock details.
上级 4d3d062b
...@@ -22,15 +22,16 @@ class UnityTestRunnerGenerator ...@@ -22,15 +22,16 @@ class UnityTestRunnerGenerator
def self.default_options def self.default_options
{ {
:includes => [], :includes => [],
:plugins => [], :plugins => [],
:framework => :unity, :framework => :unity,
:test_prefix => "test|spec|should", :test_prefix => "test|spec|should",
:setup_name => "setUp", :setup_name => "setUp",
:teardown_name => "tearDown", :teardown_name => "tearDown",
:main_name => "main", #set to nil to automatically generate each time :main_name => "main", #set to :auto to automatically generate each time
:cmdline_args => false, :main_export_decl => "",
:cmdline_args => false,
:use_param_tests => false,
} }
end end
...@@ -235,7 +236,7 @@ class UnityTestRunnerGenerator ...@@ -235,7 +236,7 @@ class UnityTestRunnerGenerator
def create_suite_setup_and_teardown(output) def create_suite_setup_and_teardown(output)
unless (@options[:suite_setup].nil?) unless (@options[:suite_setup].nil?)
output.puts("\n/*=======Suite Setup=====*/") output.puts("\n/*=======Suite Setup=====*/")
output.puts("static int suite_setup(void)") output.puts("static void suite_setup(void)")
output.puts("{") output.puts("{")
output.puts(@options[:suite_setup]) output.puts(@options[:suite_setup])
output.puts("}") output.puts("}")
...@@ -297,14 +298,38 @@ class UnityTestRunnerGenerator ...@@ -297,14 +298,38 @@ class UnityTestRunnerGenerator
def create_main(output, filename, tests, used_mocks) def create_main(output, filename, tests, used_mocks)
output.puts("\n\n/*=======MAIN=====*/") output.puts("\n\n/*=======MAIN=====*/")
main_name = @options[:main_name].nil? ? "main_#{filename.gsub('.c','')}" : "#{@options[:main_name]}" main_name = (@options[:main_name].to_sym == :auto) ? "main_#{filename.gsub('.c','')}" : "#{@options[:main_name]}"
if (main_name != "main") if (main_name != "main")
output.puts("int #{main_name}(void);") output.puts("#{@options[:main_export_decl]} int #{main_name}(void);")
end end
if (@options[:cmdline_args]) if (@options[:cmdline_args])
output.puts("int #{main_name}(int argc, char** argv)") output.puts("#{@options[:main_export_decl]} int #{main_name}(int argc, char** argv)")
output.puts("{") output.puts("{")
output.puts(" UnityParseOptions(argc, argv);") output.puts(" int parse_status = UnityParseOptions(argc, argv);")
output.puts(" if (parse_status != 0)")
output.puts(" {")
output.puts(" if (parse_status < 0)")
output.puts(" {")
output.puts(" UnityPrint(\"#{filename.gsub('.c','')}.\");")
output.puts(" UNITY_PRINT_EOL();")
if (@options[:use_param_tests])
tests.each do |test|
if ((test[:args].nil?) or (test[:args].empty?))
output.puts(" UnityPrint(\" #{test[:test]}(RUN_TEST_NO_ARGS)\");")
output.puts(" UNITY_PRINT_EOL();")
else
test[:args].each do |args|
output.puts(" UnityPrint(\" #{test[:test]}(#{args})\");")
output.puts(" UNITY_PRINT_EOL();")
end
end
end
else
tests.each { |test| output.puts(" UnityPrint(\" #{test[:test]}\");\n UNITY_PRINT_EOL();")}
end
output.puts(" }")
output.puts(" return 0;")
output.puts(" }")
else else
output.puts("int #{main_name}(void)") output.puts("int #{main_name}(void)")
output.puts("{") output.puts("{")
......
...@@ -1321,7 +1321,7 @@ int UnityParseOptions(int argc, char** argv) ...@@ -1321,7 +1321,7 @@ int UnityParseOptions(int argc, char** argv)
switch(argv[i][1]) switch(argv[i][1])
{ {
case 'l': /* list tests */ case 'l': /* list tests */
break; return -1;
case 'n': /* include tests with name including this string */ case 'n': /* include tests with name including this string */
i++; i++;
if (i < argc) if (i < argc)
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
# ========================================== # ==========================================
UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/' UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/'
$verbose = false
require 'rake' require 'rake'
require 'rake/clean' require 'rake/clean'
...@@ -58,3 +59,7 @@ end ...@@ -58,3 +59,7 @@ end
task :no_color do task :no_color do
$colour_output = false $colour_output = false
end end
task :verbose do
$verbose = true
end
...@@ -92,12 +92,12 @@ module RakefileHelpers ...@@ -92,12 +92,12 @@ module RakefileHelpers
end end
end end
def build_compiler_fields def build_compiler_fields(inject_defines)
command = tackit($cfg['compiler']['path']) command = tackit($cfg['compiler']['path'])
if $cfg['compiler']['defines']['items'].nil? if $cfg['compiler']['defines']['items'].nil?
defines = '' defines = ''
else else
defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=putcharSpy']) defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=putcharSpy'] + inject_defines)
end end
options = squash('', $cfg['compiler']['options']) options = squash('', $cfg['compiler']['options'])
includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items']) includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items'])
...@@ -106,7 +106,8 @@ module RakefileHelpers ...@@ -106,7 +106,8 @@ module RakefileHelpers
end end
def compile(file, defines=[]) def compile(file, defines=[])
compiler = build_compiler_fields compiler = build_compiler_fields(defines)
defines =
cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " + cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " +
"#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}" "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}"
obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}" obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}"
...@@ -160,11 +161,11 @@ module RakefileHelpers ...@@ -160,11 +161,11 @@ module RakefileHelpers
return {:command => command, :pre_support => pre_support, :post_support => post_support} return {:command => command, :pre_support => pre_support, :post_support => post_support}
end end
def execute(command_string, verbose=true) def execute(command_string, ok_to_fail=false)
report command_string report command_string if $verbose
output = `#{command_string}`.chomp output = `#{command_string}`.chomp
report(output) if (verbose && !output.nil? && (output.length > 0)) report(output) if ($verbose && !output.nil? && (output.length > 0))
if $?.exitstatus != 0 if (($?.exitstatus != 0) && !ok_to_fail)
raise "Command failed. (Returned #{$?.exitstatus})" raise "Command failed. (Returned #{$?.exitstatus})"
end end
return output return output
......
...@@ -53,6 +53,7 @@ compiler: ...@@ -53,6 +53,7 @@ compiler:
items: items:
- 'src/' - 'src/'
- '../src/' - '../src/'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
defines: defines:
prefix: '-D' prefix: '-D'
......
...@@ -53,6 +53,7 @@ compiler: ...@@ -53,6 +53,7 @@ compiler:
items: items:
- 'src/' - 'src/'
- '../src/' - '../src/'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
defines: defines:
prefix: '-D' prefix: '-D'
......
...@@ -15,6 +15,7 @@ compiler: ...@@ -15,6 +15,7 @@ compiler:
items: items:
- 'src/' - 'src/'
- '../src/' - '../src/'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
defines: defines:
prefix: '-D' prefix: '-D'
......
...@@ -15,6 +15,7 @@ compiler: ...@@ -15,6 +15,7 @@ compiler:
items: items:
- 'src/' - 'src/'
- '../src/' - '../src/'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
defines: defines:
prefix: '-D' prefix: '-D'
......
...@@ -15,6 +15,7 @@ compiler: ...@@ -15,6 +15,7 @@ compiler:
items: items:
- 'src/' - 'src/'
- '../src/' - '../src/'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
defines: defines:
prefix: '-D' prefix: '-D'
......
...@@ -15,6 +15,7 @@ compiler: ...@@ -15,6 +15,7 @@ compiler:
items: items:
- 'src/' - 'src/'
- '../src/' - '../src/'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
defines: defines:
prefix: '-D' prefix: '-D'
......
...@@ -28,6 +28,7 @@ compiler: ...@@ -28,6 +28,7 @@ compiler:
items: items:
- 'src/' - 'src/'
- '../src/' - '../src/'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
defines: defines:
prefix: '-D' prefix: '-D'
......
...@@ -15,6 +15,7 @@ compiler: ...@@ -15,6 +15,7 @@ compiler:
items: items:
- 'src/' - 'src/'
- '../src/' - '../src/'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
defines: defines:
prefix: '-D' prefix: '-D'
......
...@@ -32,6 +32,7 @@ compiler: ...@@ -32,6 +32,7 @@ compiler:
- [*tools_root, 'arm\inc\'] - [*tools_root, 'arm\inc\']
- 'src\' - 'src\'
- '..\src\' - '..\src\'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
- 'vendor\unity\src\' - 'vendor\unity\src\'
defines: defines:
......
...@@ -31,6 +31,7 @@ compiler: ...@@ -31,6 +31,7 @@ compiler:
- [*tools_root, 'arm\inc\'] - [*tools_root, 'arm\inc\']
- 'src\' - 'src\'
- '..\src\' - '..\src\'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
- 'vendor\unity\src\' - 'vendor\unity\src\'
- 'iar\iar_v5\incIAR\' - 'iar\iar_v5\incIAR\'
......
...@@ -31,6 +31,7 @@ compiler: ...@@ -31,6 +31,7 @@ compiler:
- [*tools_root, 'arm\inc\'] - [*tools_root, 'arm\inc\']
- 'src\' - 'src\'
- '..\src\' - '..\src\'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
- 'vendor\unity\src\' - 'vendor\unity\src\'
- 'iar\iar_v5\incIAR\' - 'iar\iar_v5\incIAR\'
......
...@@ -35,6 +35,7 @@ compiler: ...@@ -35,6 +35,7 @@ compiler:
- [*tools_root, 'arm\inc\'] - [*tools_root, 'arm\inc\']
- 'src\' - 'src\'
- '..\src\' - '..\src\'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
- 'vendor\unity\src\' - 'vendor\unity\src\'
- 'iar\iar_v5\incIAR\' - 'iar\iar_v5\incIAR\'
......
...@@ -33,6 +33,7 @@ compiler: ...@@ -33,6 +33,7 @@ compiler:
- [*tools_root, 'arm\inc\'] - [*tools_root, 'arm\inc\']
- 'src\' - 'src\'
- '..\src\' - '..\src\'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
- 'vendor\unity\src\' - 'vendor\unity\src\'
- 'iar\iar_v5\incIAR\' - 'iar\iar_v5\incIAR\'
......
...@@ -34,6 +34,7 @@ compiler: ...@@ -34,6 +34,7 @@ compiler:
- [*core_lib, 'dlib'] - [*core_lib, 'dlib']
- 'src\' - 'src\'
- '../src/' - '../src/'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
- 'vendor\unity\src' - 'vendor\unity\src'
defines: defines:
......
...@@ -34,6 +34,7 @@ compiler: ...@@ -34,6 +34,7 @@ compiler:
- [*tools_root, 'sh\inc\c'] - [*tools_root, 'sh\inc\c']
- 'src\' - 'src\'
- '..\src\' - '..\src\'
- 'testdata/'
- *unit_tests_path - *unit_tests_path
- 'vendor\unity\src\' - 'vendor\unity\src\'
defines: defines:
......
#ifndef CEXCEPTION_H
#define CEXCEPTION_H
#define CEXCEPTION_BEING_USED 1
#endif //CEXCEPTION_H
#ifndef DEF_H
#define DEF_H
#define EXTERN_DECL
extern int CounterSuiteSetup;
#endif //DEF_H
#ifndef CMOCK_H
#define CMOCK_H
int CMockMemFreeFinalCounter = 0;
int mockMock_Init_Counter = 0;
int mockMock_Verify_Counter = 0;
int mockMock_Destroy_Counter = 0;
void CMock_Guts_MemFreeFinal(void) { CMockMemFreeFinalCounter++; }
void mockMock_Init(void) { mockMock_Init_Counter++; }
void mockMock_Verify(void) { mockMock_Verify_Counter++; }
void mockMock_Destroy(void) { mockMock_Destroy_Counter++; }
#endif //CMOCK_H
#ifndef MOCK_MOCK_H
#define MOCK_MOCK_H
extern int mockMock_Init_Counter;
extern int mockMock_Verify_Counter;
extern int mockMock_Destroy_Counter;
extern int CMockMemFreeFinalCounter;
void mockMock_Init(void);
void mockMock_Verify(void);
void mockMock_Destroy(void);
#endif //MOCK_MOCK_H
// This is just a sample test file to be used to test the generator script
#ifndef TEST_SAMPLE_H
#define TEST_SAMPLE_H
#include <setjmp.h>
#include "unity.h"
#include "funky.h"
#include "Mockstanky.h"
void setUp(void)
{
CustomSetupStuff();
}
void tearDown(void)
{
CustomTeardownStuff
}
//Yup, nice comment
void test_TheFirstThingToTest(void)
{
TEST_ASSERT(1);
TEST_ASSERT_TRUE(1);
}
/*
void test_ShouldBeIgnored(void)
{
DoesStuff();
}
*/
//void test_ShouldAlsoNotBeTested(void)
//{
// Call_An_Expect();
//
// CallAFunction();
// test_CallAFunctionThatLooksLikeATest();
//}
void test_TheSecondThingToTest(void)
{
Call_An_Expect();
CallAFunction();
test_CallAFunctionThatLooksLikeATest();
}
#endif //TEST_SAMPLE_H
:unity:
:includes:
- two.h
- three.h
- <four.h>
:plugins:
- :cexception
:suite_setup: |
a_yaml_setup();
\ No newline at end of file
/* This Test File Is Used To Verify Many Combinations Of Using the Generate Test Runner Script */
#include <stdio.h>
#include "unity.h"
#include "Defs.h"
#ifdef USE_CEXCEPTION
#include "CException.h"
#endif
/* Notes about prefixes:
test - normal default prefix. these are "always run" tests for this procedure
spec - normal default prefix. required to run default setup/teardown calls.
should - normal default prefix.
qwiktest - custom prefix for when tests skip all setup/teardown calls.
custtest - custom prefix for when tests use custom setup/teardown calls.
paratest - custom prefix for when we want to verify parameterized tests.
extest - custom prefix only used during cexception
suitetest- custom prefix for when we want to use custom suite setup/teardown
*/
/* Support for Meta Test Rig */
#define TEST_CASE(a)
void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests
/* Global Variables Used During These Tests */
int CounterSetup = 0;
int CounterTeardown = 0;
int CounterSuiteSetup = 0;
void setUp(void)
{
CounterSetup = 1;
}
void tearDown(void)
{
CounterTeardown = 1;
}
void custom_setup(void)
{
CounterSetup = 2;
}
void custom_teardown(void)
{
CounterTeardown = 2;
}
/*
void test_OldSchoolCommentsShouldBeIgnored(void)
{
TEST_ASSERT_FAIL("Old-School Comments Should Be Ignored");
}
*/
void test_ThisTestAlwaysPasses(void)
{
TEST_PASS();
}
void test_ThisTestAlwaysFails(void)
{
TEST_FAIL_MESSAGE("This Test Should Fail");
}
void test_ThisTestAlwaysIgnored(void)
{
TEST_IGNORE_MESSAGE("This Test Should Be Ignored");
}
void qwiktest_ThisTestPassesWhenNoSetupRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(0, CounterSetup, "Setup Was Unexpectedly Run");
}
void qwiktest_ThisTestPassesWhenNoTeardownRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(0, CounterTeardown, "Teardown Was Unexpectedly Run");
}
void spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(0, CounterSuiteSetup, "Suite Setup Was Unexpectedly Run");
}
void spec_ThisTestPassesWhenNormalSetupRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(1, CounterSetup, "Normal Setup Wasn't Run");
}
void spec_ThisTestPassesWhenNormalTeardownRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(1, CounterTeardown, "Normal Teardown Wasn't Run");
}
void custtest_ThisTestPassesWhenCustomSetupRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(2, CounterSetup, "Custom Setup Wasn't Run");
}
void custtest_ThisTestPassesWhenCustomTeardownRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(2, CounterTeardown, "Custom Teardown Wasn't Run");
}
//void test_NewStyleCommentsShouldBeIgnored(void)
//{
// TEST_ASSERT_FAIL("New Style Comments Should Be Ignored");
//}
void test_NotBeConfusedByLongComplicatedStrings(void)
{
const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are The Same");
}
void test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings(void)
{
TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True");
}
void test_StillNotBeConfusedByLongComplicatedStrings(void)
{
const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are Still The Same");
}
void should_RunTestsStartingWithShouldByDefault(void)
{
TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True");
}
TEST_CASE(25)
TEST_CASE(125)
TEST_CASE(5)
void paratest_ShouldHandleParameterizedTests(int Num)
{
TEST_ASSERT_EQUAL_MESSAGE(0, (Num % 5), "All The Values Are Divisible By 5");
}
TEST_CASE(7)
void paratest_ShouldHandleParameterizedTests2(int Num)
{
TEST_ASSERT_EQUAL_MESSAGE(7, Num, "The Only Call To This Passes");
}
void paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid(void)
{
TEST_PASS();
}
TEST_CASE(17)
void paratest_ShouldHandleParameterizedTestsThatFail(int Num)
{
TEST_ASSERT_EQUAL_MESSAGE(3, Num, "This call should fail");
}
#ifdef USE_CEXCEPTION
void extest_ShouldHandleCExceptionInTest(void)
{
TEST_ASSERT_EQUAL_MESSAGE(1, CEXCEPTION_BEING_USED, "Should be pulling in CException");
}
#endif
#ifdef USE_ANOTHER_MAIN
int custom_main(void);
int main(void)
{
return custom_main();
}
#endif
void suitetest_ThisTestPassesWhenCustomSuiteSetupAndTeardownRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(1, CounterSuiteSetup, "Suite Setup Should Have Run");
}
/* This Test File Is Used To Verify Many Combinations Of Using the Generate Test Runner Script */
#include <stdio.h>
#include "unity.h"
#include "Defs.h"
#include "mockMock.h"
#ifdef USE_CEXCEPTION
#include "CException.h"
#endif
/* Notes about prefixes:
test - normal default prefix. these are "always run" tests for this procedure
spec - normal default prefix. required to run default setup/teardown calls.
should - normal default prefix.
qwiktest - custom prefix for when tests skip all setup/teardown calls.
custtest - custom prefix for when tests use custom setup/teardown calls.
paratest - custom prefix for when we want to verify parameterized tests.
extest - custom prefix only used during cexception
suitetest- custom prefix for when we want to use custom suite setup/teardown
*/
/* Support for Meta Test Rig */
#define TEST_CASE(a)
void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests
/* Global Variables Used During These Tests */
int CounterSetup = 0;
int CounterTeardown = 0;
int CounterSuiteSetup = 0;
void setUp(void)
{
CounterSetup = 1;
}
void tearDown(void)
{
CounterTeardown = 1;
}
void custom_setup(void)
{
CounterSetup = 2;
}
void custom_teardown(void)
{
CounterTeardown = 2;
}
/*
void test_OldSchoolCommentsShouldBeIgnored(void)
{
TEST_ASSERT_FAIL("Old-School Comments Should Be Ignored");
}
*/
void test_ThisTestAlwaysPasses(void)
{
TEST_PASS();
}
void test_ThisTestAlwaysFails(void)
{
TEST_FAIL_MESSAGE("This Test Should Fail");
}
void test_ThisTestAlwaysIgnored(void)
{
TEST_IGNORE_MESSAGE("This Test Should Be Ignored");
}
void qwiktest_ThisTestPassesWhenNoSetupRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(0, CounterSetup, "Setup Was Unexpectedly Run");
}
void qwiktest_ThisTestPassesWhenNoTeardownRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(0, CounterTeardown, "Teardown Was Unexpectedly Run");
}
void spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(0, CounterSuiteSetup, "Suite Setup Was Unexpectedly Run");
}
void spec_ThisTestPassesWhenNormalSetupRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(1, CounterSetup, "Normal Setup Wasn't Run");
}
void spec_ThisTestPassesWhenNormalTeardownRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(1, CounterTeardown, "Normal Teardown Wasn't Run");
}
void custtest_ThisTestPassesWhenCustomSetupRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(2, CounterSetup, "Custom Setup Wasn't Run");
}
void custtest_ThisTestPassesWhenCustomTeardownRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(2, CounterTeardown, "Custom Teardown Wasn't Run");
}
//void test_NewStyleCommentsShouldBeIgnored(void)
//{
// TEST_ASSERT_FAIL("New Style Comments Should Be Ignored");
//}
void test_NotBeConfusedByLongComplicatedStrings(void)
{
const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are The Same");
}
void test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings(void)
{
TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True");
}
void test_StillNotBeConfusedByLongComplicatedStrings(void)
{
const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are Still The Same");
}
void should_RunTestsStartingWithShouldByDefault(void)
{
TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True");
}
TEST_CASE(25)
TEST_CASE(125)
TEST_CASE(5)
void paratest_ShouldHandleParameterizedTests(int Num)
{
TEST_ASSERT_EQUAL_MESSAGE(0, (Num % 5), "All The Values Are Divisible By 5");
}
TEST_CASE(7)
void paratest_ShouldHandleParameterizedTests2(int Num)
{
TEST_ASSERT_EQUAL_MESSAGE(7, Num, "The Only Call To This Passes");
}
void paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid(void)
{
TEST_PASS();
}
TEST_CASE(17)
void paratest_ShouldHandleParameterizedTestsThatFail(int Num)
{
TEST_ASSERT_EQUAL_MESSAGE(3, Num, "This call should fail");
}
#ifdef USE_CEXCEPTION
void extest_ShouldHandleCExceptionInTest(void)
{
TEST_ASSERT_EQUAL_MESSAGE(1, CEXCEPTION_BEING_USED, "Should be pulling in CException");
}
#endif
#ifdef USE_ANOTHER_MAIN
int custom_main(void);
int main(void)
{
return custom_main();
}
#endif
void suitetest_ThisTestPassesWhenCustomSuiteSetupAndTeardownRan(void)
{
TEST_ASSERT_EQUAL_MESSAGE(1, CounterSuiteSetup, "Suite Setup Should Have Run");
}
void test_ShouldCallMockInitAndVerifyFunctionsForEachTest(void)
{
int passes = (int)(Unity.NumberOfTests - Unity.TestFailures - Unity.TestIgnores);
TEST_ASSERT_EQUAL_MESSAGE(Unity.NumberOfTests, mockMock_Init_Counter, "Mock Init Should Be Called Once Per Test Started");
TEST_ASSERT_EQUAL_MESSAGE(passes, mockMock_Verify_Counter, "Mock Verify Should Be Called Once Per Test Passed");
TEST_ASSERT_EQUAL_MESSAGE(Unity.NumberOfTests - 1, mockMock_Destroy_Counter, "Mock Destroy Should Be Called Once Per Test Completed");
TEST_ASSERT_EQUAL_MESSAGE(0, CMockMemFreeFinalCounter, "Mock MemFreeFinal Should Not Be Called Until End");
}
// This is just a sample test file to be used to test the generator script
#ifndef TEST_SAMPLE_H
#define TEST_SAMPLE_H
#include <setjmp.h>
#include "unity.h"
#include "funky.h"
#include "stanky.h"
void setUp(void)
{
CustomSetupStuff();
}
void tearDown(void)
{
CustomTeardownStuff
}
//Yup, nice comment
void test_TheFirstThingToTest(void)
{
TEST_ASSERT(1);
TEST_ASSERT_TRUE(1);
}
/*
void test_ShouldBeIgnored(void)
{
DoesStuff();
}
*/
//void test_ShouldAlsoNotBeTested(void)
//{
// Call_An_Expect();
//
// CallAFunction();
// test_CallAFunctionThatLooksLikeATest();
//}
void test_TheSecondThingToTest(void)
{
uint8_t* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
Call_An_Expect();
CallAFunction();
test_CallAFunctionThatLooksLikeATest();
}
void test_TheThirdThingToTest(void)
{
CallAFunction();
}
void test_TheFourthThingToTest(void)
{
uint8_t* anotherString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
Call_An_Expect();
CallAFunction();
test_CallAFunctionThatLooksLikeATest();
}
#endif //TEST_SAMPLE_H
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册