Add McuAsk TestTool.
This commit is contained in:
parent
e781fbf37d
commit
f56defee42
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
# cmake_minimum_required(VERSION 2.8.0)
|
# cmake_minimum_required(VERSION 2.8.0)
|
||||||
add_subdirectory(IpcConfig)
|
add_subdirectory(IpcConfig)
|
||||||
add_subdirectory(McuManager)
|
add_subdirectory(McuManager)
|
||||||
|
add_subdirectory(McuAskBase)
|
2
test/middleware/McuAskBase/CMakeLists.txt
Normal file
2
test/middleware/McuAskBase/CMakeLists.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
|
||||||
|
add_subdirectory(tool)
|
60
test/middleware/McuAskBase/tool/CMakeLists.txt
Normal file
60
test/middleware/McuAskBase/tool/CMakeLists.txt
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake)
|
||||||
|
set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH})
|
||||||
|
set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH})
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
./src
|
||||||
|
./include
|
||||||
|
${UTILS_SOURCE_PATH}/StatusCode/include
|
||||||
|
${UTILS_SOURCE_PATH}/Log/include
|
||||||
|
${MIDDLEWARE_SOURCE_PATH}/McuAskBase/include
|
||||||
|
${MIDDLEWARE_SOURCE_PATH}/McuManager/include
|
||||||
|
# ${UTILS_SOURCE_PATH}/UartDevice/include
|
||||||
|
# ${UTILS_SOURCE_PATH}/ModBusCRC16/include
|
||||||
|
# ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include
|
||||||
|
# ${TEST_SOURCE_PATH}/utils/UartDevice/tool/include
|
||||||
|
${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include
|
||||||
|
${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googlemock/include
|
||||||
|
)
|
||||||
|
# link_directories(
|
||||||
|
# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs
|
||||||
|
# )
|
||||||
|
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
|
||||||
|
aux_source_directory(./src TEST_TOOL_SRC_FILES)
|
||||||
|
set(TEST_TOOL_TARGET McuAskBaseTestTool)
|
||||||
|
add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES})
|
||||||
|
target_link_libraries(${TEST_TOOL_TARGET} UartDeviceTestTool Log)
|
||||||
|
|
||||||
|
if ("${CLANG_TIDY_SUPPORT}" MATCHES "true")
|
||||||
|
add_custom_target(
|
||||||
|
McuAskBaseTestTool_code_check
|
||||||
|
COMMAND ${CLANG_TIDY_EXE}
|
||||||
|
-checks='${CLANG_TIDY_CHECKS}'
|
||||||
|
--header-filter=.*
|
||||||
|
--system-headers=false
|
||||||
|
${TEST_TOOL_SRC_FILES}
|
||||||
|
${CLANG_TIDY_CONFIG}
|
||||||
|
-p ${PLATFORM_PATH}/cmake-shell
|
||||||
|
WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/McuAskBase/tool
|
||||||
|
)
|
||||||
|
file(GLOB_RECURSE HEADER_FILES *.h)
|
||||||
|
add_custom_target(
|
||||||
|
McuAskBaseTestTool_code_format
|
||||||
|
COMMAND ${CLANG_FORMAT_EXE}
|
||||||
|
-style=file
|
||||||
|
-i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES}
|
||||||
|
WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/McuAskBase/tool
|
||||||
|
)
|
||||||
|
add_custom_command(
|
||||||
|
TARGET ${TEST_TOOL_TARGET}
|
||||||
|
PRE_BUILD
|
||||||
|
COMMAND make McuAskBaseTestTool_code_check
|
||||||
|
COMMAND make McuAskBaseTestTool_code_format
|
||||||
|
WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
define_file_name(${TEST_TOOL_TARGET})
|
88
test/middleware/McuAskBase/tool/include/McuAskBaseTestTool.h
Normal file
88
test/middleware/McuAskBase/tool/include/McuAskBaseTestTool.h
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Fancy Code.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
#ifndef MCU_ASK_BASE_TEST_TOOL_H
|
||||||
|
#define MCU_ASK_BASE_TEST_TOOL_H
|
||||||
|
#include "McuAskBase.h"
|
||||||
|
#include <gmock/gmock.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
using ::testing::_;
|
||||||
|
using ::testing::Action;
|
||||||
|
using ::testing::ActionInterface;
|
||||||
|
using ::testing::AnyNumber;
|
||||||
|
using ::testing::Assign;
|
||||||
|
using ::testing::AtLeast;
|
||||||
|
using ::testing::ByMove;
|
||||||
|
using ::testing::ByRef;
|
||||||
|
using ::testing::DefaultValue;
|
||||||
|
using ::testing::DoAll;
|
||||||
|
using ::testing::DoDefault;
|
||||||
|
using ::testing::IgnoreResult;
|
||||||
|
using ::testing::Invoke;
|
||||||
|
using ::testing::InvokeWithoutArgs;
|
||||||
|
using ::testing::MakePolymorphicAction;
|
||||||
|
using ::testing::PolymorphicAction;
|
||||||
|
using ::testing::Return;
|
||||||
|
using ::testing::ReturnNew;
|
||||||
|
using ::testing::ReturnNull;
|
||||||
|
using ::testing::ReturnPointee;
|
||||||
|
using ::testing::ReturnRef;
|
||||||
|
using ::testing::ReturnRefOfCopy;
|
||||||
|
using ::testing::ReturnRoundRobin;
|
||||||
|
using ::testing::SaveArg;
|
||||||
|
using ::testing::SetArgPointee;
|
||||||
|
using ::testing::SetArgumentPointee;
|
||||||
|
using ::testing::Unused;
|
||||||
|
using ::testing::WithArgs;
|
||||||
|
using ::testing::internal::BuiltInDefaultValue;
|
||||||
|
class McuAskBaseTest : public McuAskBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
McuAskBaseTest(const McuAskBlock isBlock, const McuAskReply needReply,
|
||||||
|
const unsigned int timeoutMs = DEFAULT_ASK_TIMEOUT)
|
||||||
|
: McuAskBase(isBlock, needReply, timeoutMs)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
virtual ~McuAskBaseTest() = default;
|
||||||
|
ASK_RESULT Blocking(void) override;
|
||||||
|
bool NeedReply(void) override;
|
||||||
|
void ReplyFinished(const bool result) override;
|
||||||
|
bool IfTimeout(const unsigned int &integrationTimeMs) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void BlockingTrace(void) {}
|
||||||
|
virtual void NeedReplyTrace(void) {}
|
||||||
|
virtual void ReplyFinishedTrace(const bool result) {}
|
||||||
|
virtual void IfTimeoutTrace(const unsigned int &integrationTimeMs) {}
|
||||||
|
};
|
||||||
|
class McuAskBaseTestTool : public McuAskBaseTest
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
McuAskBaseTestTool(const McuAskBlock isBlock, const McuAskReply needReply,
|
||||||
|
const unsigned int timeoutMs = DEFAULT_ASK_TIMEOUT)
|
||||||
|
: McuAskBaseTest(isBlock, needReply, timeoutMs)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
virtual ~McuAskBaseTestTool() = default;
|
||||||
|
MOCK_METHOD0(BlockingTrace, void(void));
|
||||||
|
MOCK_METHOD0(NeedReplyTrace, void(void));
|
||||||
|
MOCK_METHOD1(ReplyFinishedTrace, void(const bool));
|
||||||
|
MOCK_METHOD1(IfTimeoutTrace, void(const unsigned int &));
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void McuAskDefaultFeatures(std::shared_ptr<McuAskBaseTestTool> &mock);
|
||||||
|
};
|
||||||
|
#endif
|
43
test/middleware/McuAskBase/tool/src/McuAskBaseTestTool.cpp
Normal file
43
test/middleware/McuAskBase/tool/src/McuAskBaseTestTool.cpp
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Fancy Code.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
#include "McuAskBaseTestTool.h"
|
||||||
|
ASK_RESULT McuAskBaseTest::Blocking(void)
|
||||||
|
{
|
||||||
|
BlockingTrace();
|
||||||
|
return McuAskBase::Blocking();
|
||||||
|
}
|
||||||
|
bool McuAskBaseTest::NeedReply(void)
|
||||||
|
{
|
||||||
|
NeedReplyTrace();
|
||||||
|
return McuAskBase::NeedReply();
|
||||||
|
}
|
||||||
|
void McuAskBaseTest::ReplyFinished(const bool result)
|
||||||
|
{
|
||||||
|
ReplyFinishedTrace(result);
|
||||||
|
McuAskBase::ReplyFinished(result);
|
||||||
|
}
|
||||||
|
bool McuAskBaseTest::IfTimeout(const unsigned int &integrationTimeMs)
|
||||||
|
{
|
||||||
|
IfTimeoutTrace(integrationTimeMs);
|
||||||
|
return McuAskBase::IfTimeout(integrationTimeMs);
|
||||||
|
}
|
||||||
|
void McuAskBaseTestTool::McuAskDefaultFeatures(std::shared_ptr<McuAskBaseTestTool> &mock)
|
||||||
|
{
|
||||||
|
constexpr int CALL_ONLY_ONCE = 1;
|
||||||
|
EXPECT_CALL(*mock.get(), BlockingTrace()).Times(CALL_ONLY_ONCE);
|
||||||
|
EXPECT_CALL(*mock.get(), NeedReplyTrace()).Times(AtLeast(1));
|
||||||
|
EXPECT_CALL(*mock.get(), ReplyFinishedTrace(_)).Times(CALL_ONLY_ONCE);
|
||||||
|
EXPECT_CALL(*mock.get(), IfTimeoutTrace(_)).Times(AnyNumber());
|
||||||
|
}
|
|
@ -14,6 +14,7 @@ include_directories(
|
||||||
${TEST_SOURCE_PATH}/utils/LinuxApiMock/include
|
${TEST_SOURCE_PATH}/utils/LinuxApiMock/include
|
||||||
${TEST_SOURCE_PATH}/utils/UartDevice/tool/include
|
${TEST_SOURCE_PATH}/utils/UartDevice/tool/include
|
||||||
${TEST_SOURCE_PATH}/utils/McuProtocol/tool/include
|
${TEST_SOURCE_PATH}/utils/McuProtocol/tool/include
|
||||||
|
${TEST_SOURCE_PATH}/middleware/McuAskBase/tool/include
|
||||||
${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include
|
${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include
|
||||||
${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googlemock/include
|
${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googlemock/include
|
||||||
)
|
)
|
||||||
|
@ -40,7 +41,7 @@ endif()
|
||||||
|
|
||||||
set(TARGET_NAME McuManagerTest)
|
set(TARGET_NAME McuManagerTest)
|
||||||
add_executable(${TARGET_NAME} ${SRC_FILES_MAIN} ${SRC_FILES})
|
add_executable(${TARGET_NAME} ${SRC_FILES_MAIN} ${SRC_FILES})
|
||||||
target_link_libraries(${TARGET_NAME} McuAskBase McuManager McuManagerTestTool gtest gmock pthread)
|
target_link_libraries(${TARGET_NAME} McuAskBase McuManager McuManagerTestTool McuAskBaseTestTool gtest gmock pthread)
|
||||||
if(${TEST_COVERAGE} MATCHES "true")
|
if(${TEST_COVERAGE} MATCHES "true")
|
||||||
target_link_libraries(${TARGET_NAME} gcov)
|
target_link_libraries(${TARGET_NAME} gcov)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "IMcuManager.h"
|
#include "IMcuManager.h"
|
||||||
#include "LinuxApiMock.h"
|
#include "LinuxApiMock.h"
|
||||||
#include "McuAskBase.h"
|
#include "McuAskBase.h"
|
||||||
|
#include "McuAskBaseTestTool.h"
|
||||||
#include "McuManagerTestTool.h"
|
#include "McuManagerTestTool.h"
|
||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
@ -44,17 +45,17 @@ public:
|
||||||
// --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_GetIpcMissiony
|
// --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_GetIpcMissiony
|
||||||
TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_GetIpcMissiony)
|
TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_GetIpcMissiony)
|
||||||
{
|
{
|
||||||
class McuAskTest : public McuAsk<IpcMission>, public McuAskBase
|
class McuAskTest : public McuAsk<IpcMission>, public McuAskBaseTestTool
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
McuAskTest() : McuAskBase(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) {}
|
McuAskTest() : McuAskBaseTestTool(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) {}
|
||||||
virtual ~McuAskTest() = default;
|
virtual ~McuAskTest() = default;
|
||||||
void ReplyFinished(const bool result) override
|
void ReplyFinished(const bool result) override
|
||||||
{
|
{
|
||||||
//
|
McuAskBaseTestTool::ReplyFinished(result);
|
||||||
McuAskBase::ReplyFinished(result);
|
|
||||||
if (result) {
|
if (result) {
|
||||||
LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast<int>(mDataReply));
|
LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast<int>(mDataReply));
|
||||||
|
// Do something here.
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LogError("Ask data falied.\n");
|
LogError("Ask data falied.\n");
|
||||||
|
@ -63,6 +64,8 @@ TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_GetIpcMissiony)
|
||||||
};
|
};
|
||||||
IMcuManager::GetInstance()->Init();
|
IMcuManager::GetInstance()->Init();
|
||||||
std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
|
std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
|
||||||
|
std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(ask);
|
||||||
|
McuAskBaseTestTool::McuAskDefaultFeatures(testTool);
|
||||||
IMcuManager::GetInstance()->GetIpcMission(ask);
|
IMcuManager::GetInstance()->GetIpcMission(ask);
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
||||||
IMcuManager::GetInstance()->UnInit();
|
IMcuManager::GetInstance()->UnInit();
|
||||||
|
|
|
@ -62,7 +62,11 @@ int main(int argc, char *argv[])
|
||||||
```
|
```
|
||||||
4.
|
4.
|
||||||
|
|
||||||
## 1.2. 目录结构
|
## 1.2. TestTool 测试工具
|
||||||
|
|
||||||
|
   每个独立模块(SDK内具有独立CMakeLists.txt的代码模块)都由对应的TestTool模块,主要用于对该模块的接口进行gmock处理,且对外暴露接口具备复用属性。一般类命名:模块名称+TestTool。
|
||||||
|
|
||||||
|
## 1.3. 目录结构
|
||||||
|
|
||||||
  所有测试代码位于< test >目录下,< test >下的目录结构保持和< SDK >一致,表示对应sdk代码模块的测试代码;
|
  所有测试代码位于< test >目录下,< test >下的目录结构保持和< SDK >一致,表示对应sdk代码模块的测试代码;
|
||||||
|
|
||||||
|
@ -73,5 +77,5 @@ int main(int argc, char *argv[])
|
||||||
├── mainTest.cpp
|
├── mainTest.cpp
|
||||||
├── src // 芯片平台的测试代码;
|
├── src // 芯片平台的测试代码;
|
||||||
├── src_mock // Linux x86测试代码 需要对板载接口打桩进行测试;
|
├── src_mock // Linux x86测试代码 需要对板载接口打桩进行测试;
|
||||||
└── tool // 该模块需要对外复用的测试代码;
|
└── tool // TestTool:该模块需要对外复用的测试代码;
|
||||||
```
|
```
|
Loading…
Reference in New Issue
Block a user