Преглед на файлове

Z991239-632 #comment feature: 单元测试结合到OnExam中

gifur преди 5 години
родител
ревизия
4a67ab8d93
променени са 4 файла, в които са добавени 33 реда и са изтрити 14 реда
  1. 14 8
      Common/SpTest.h
  2. 1 1
      spbase/SpTest.cpp
  3. 3 1
      test/module/mod_sample/mod_SampleEntity.cpp
  4. 15 4
      test/module/mod_sample/mod_SampleEntity.h

+ 14 - 8
Common/SpTest.h

@@ -464,10 +464,16 @@ struct ITestRunner {
 
 };
 
+struct TestConfig
+{
+	std::string filterTag;
+};
+
 struct ITestCaseRegistry
 {
 	virtual ~ITestCaseRegistry() {}
-	virtual std::vector<TestCase> const& getAllTests() const = 0;
+	/** TODO: relate with Entity Name*/
+	virtual std::vector<TestCase> const& getAllTests(TestConfig const& config) const = 0;
 };
 
 struct ITestRegistryHub {
@@ -497,15 +503,15 @@ SPBASE_API void RegisterTestCaseFunction(TestFunction function,
 template<typename TClass>
 class MethodTestCase : public  IMethodTestCase {
 public :
-	MethodTestCase(void (TClass::* method)()) : m_method(method) {}
+	MethodTestCase(ErrorCodeEnum(TClass::* method)()) : m_method(method) {}
 	virtual ErrorCodeEnum RunTest() {
 		TClass obj;
-		(obj.*m_method)();
-		return Error_Succeed;
+		return (obj.*m_method)();
+		//return Error_Succeed;
 	}
 private:
 	virtual ~MethodTestCase() {}
-	void (TClass::* m_method)();
+	ErrorCodeEnum(TClass::* m_method)();
 };
 
 class DefaultFuncTestCase : public IMethodTestCase {
@@ -539,7 +545,7 @@ struct TestAutoReg {
 	/** for test Class*/
 	template<typename TClass>
 	TestAutoReg(
-		void (TClass::* method)(),
+		ErrorCodeEnum(TClass::* method)(),
 		char const* lpcszClassName,
 		NameAndDesc const& nameAndDesc,
 		SourceLineInfo const& lineInfo) 
@@ -620,11 +626,11 @@ public:
 #define INTERNAL_RVC_TEST_CASE_METHOD2(TestName, ClassName, ...)	\
 	namespace {	\
 		struct TestName : ClassName {	\
-			void Test();	\
+			ErrorCodeEnum Test();	\
 		};	\
 		TestAutoReg RVC_INTERVAL_UNIQUE_NAME(testAutoReg)(&TestName::Test, RVC_INTERVAL_STRINGFY(ClassName), SP::Detail::NameAndDesc(__VA_ARGS__), SP_INTERNAL_LINEINFO); \
 	}	\
-	void TestName::Test() 
+	ErrorCodeEnum TestName::Test() 
 
 #define INTERNAL_RVC_TEST_CASE_METHOD(ClassName, ...)	\
 	INTERNAL_RVC_TEST_CASE_METHOD2(RVC_INTERVAL_UNIQUE_NAME(CVRssalCtseTduS), ClassName, __VA_ARGS__)

+ 1 - 1
spbase/SpTest.cpp

@@ -27,7 +27,7 @@ namespace {
 			m_functions.push_back(testCase);
 		}
 
-		virtual std::vector<TestCase> const& getAllTests() const {
+		virtual std::vector<TestCase> const& getAllTests(TestConfig const& config) const {
 			return m_functions;
 		}
 

+ 3 - 1
test/module/mod_sample/mod_SampleEntity.cpp

@@ -8,11 +8,13 @@
 RVC_TEST_CASE_METHOD(CSampleEntity, "TestForCSampleEntity")
 {
 	Dbg("TestForCSampleEntity Debug.");
+	return Error_Succeed;
 }
 
 RVC_TEST_CASE_METHOD(CSampleEntity, "TestForCSampleEntity2")
 {
 	Dbg("TestForCSampleEntity2 Debug.");
+	return Error_Succeed;
 }
 
 RVC_TEST_CASE("TestForCSampleEntity3")
@@ -20,7 +22,7 @@ RVC_TEST_CASE("TestForCSampleEntity3")
 	CSampleEntity entity;
 	Dbg("TestForCSampleEntity3 Debug: %s %s", entity.GetEntityName(), entity.GetEntityVersion());
 
-	return Error_Succeed;
+	return Error_Unexpect;
 }
 
 

+ 15 - 4
test/module/mod_sample/mod_SampleEntity.h

@@ -224,16 +224,27 @@ public:
 
 	void OnExam(CSmartPointer<ITransactionContext> pTransactionContext) override
 	{
-		
 		LOG_FUNCTION();
 
-		TestRunner runner;
-		std::vector<TestCase> const& allTestCases = GetRegistryHub().GetTestCaseRegistry().getAllTests();
+		//TestRunner runner;
+		TestConfig defaultConfig;
+		std::vector<TestCase> const& allTestCases = GetRegistryHub().GetTestCaseRegistry().getAllTests(defaultConfig);
+		ErrorCodeEnum result = (allTestCases.size() > 0) ? Error_Succeed : Error_IgnoreAll;
 		for (std::vector<TestCase>::const_iterator itStart = allTestCases.begin(), itEnd = allTestCases.end(); itStart != itEnd; ++itStart) {
 			TestCaseInfo const& testCaseInfo = itStart->GetTestInfo();
 			Dbg("%s", testCaseInfo.strName.c_str());
-			runner.RunTest(*itStart);
+			ErrorCodeEnum testResult = itStart->RunTest();
+			if (testResult != Error_Succeed) {
+				LogError(Severity_Middle, Error_Failed, 0, CSimpleStringA::Format(
+					"Test: %s %s file: {%s} ,line: {%d} failed, return %s.",
+					testCaseInfo.strName.c_str(), 
+					testCaseInfo.strDescription.empty() ? "(No description)": testCaseInfo.strDescription.c_str(),
+					_GetFileName(testCaseInfo.lineInfo.file), testCaseInfo.lineInfo.line, SpStrError(testResult)));
+				if (result != Error_Failed)
+					result = Error_Failed;
+			}
 		}
+		pTransactionContext->SendAnswer(result);
 	}
 
 #endif