mirror of
https://gitee.com/jiuyilian/embedded-framework.git
synced 2025-01-06 10:16:51 -05:00
Add McuAsk TestTool.
This commit is contained in:
parent
e781fbf37d
commit
f56defee42
|
@ -1,4 +1,5 @@
|
|||
|
||||
# cmake_minimum_required(VERSION 2.8.0)
|
||||
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/UartDevice/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/googlemock/include
|
||||
)
|
||||
|
@ -40,7 +41,7 @@ endif()
|
|||
|
||||
set(TARGET_NAME McuManagerTest)
|
||||
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")
|
||||
target_link_libraries(${TARGET_NAME} gcov)
|
||||
endif()
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "IMcuManager.h"
|
||||
#include "LinuxApiMock.h"
|
||||
#include "McuAskBase.h"
|
||||
#include "McuAskBaseTestTool.h"
|
||||
#include "McuManagerTestTool.h"
|
||||
#include <gmock/gmock.h>
|
||||
#include <gtest/gtest.h>
|
||||
|
@ -44,17 +45,17 @@ public:
|
|||
// --gtest_filter=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:
|
||||
McuAskTest() : McuAskBase(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) {}
|
||||
McuAskTest() : McuAskBaseTestTool(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) {}
|
||||
virtual ~McuAskTest() = default;
|
||||
void ReplyFinished(const bool result) override
|
||||
{
|
||||
//
|
||||
McuAskBase::ReplyFinished(result);
|
||||
McuAskBaseTestTool::ReplyFinished(result);
|
||||
if (result) {
|
||||
LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast<int>(mDataReply));
|
||||
// Do something here.
|
||||
}
|
||||
else {
|
||||
LogError("Ask data falied.\n");
|
||||
|
@ -63,6 +64,8 @@ TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_GetIpcMissiony)
|
|||
};
|
||||
IMcuManager::GetInstance()->Init();
|
||||
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);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
||||
IMcuManager::GetInstance()->UnInit();
|
||||
|
|
|
@ -62,7 +62,11 @@ int main(int argc, char *argv[])
|
|||
```
|
||||
4.
|
||||
|
||||
## 1.2. 目录结构
|
||||
## 1.2. TestTool 测试工具
|
||||
|
||||
   每个独立模块(SDK内具有独立CMakeLists.txt的代码模块)都由对应的TestTool模块,主要用于对该模块的接口进行gmock处理,且对外暴露接口具备复用属性。一般类命名:模块名称+TestTool。
|
||||
|
||||
## 1.3. 目录结构
|
||||
|
||||
  所有测试代码位于< test >目录下,< test >下的目录结构保持和< SDK >一致,表示对应sdk代码模块的测试代码;
|
||||
|
||||
|
@ -73,5 +77,5 @@ int main(int argc, char *argv[])
|
|||
├── mainTest.cpp
|
||||
├── src // 芯片平台的测试代码;
|
||||
├── src_mock // Linux x86测试代码 需要对板载接口打桩进行测试;
|
||||
└── tool // 该模块需要对外复用的测试代码;
|
||||
└── tool // TestTool:该模块需要对外复用的测试代码;
|
||||
```
|
Loading…
Reference in New Issue
Block a user