看大象无形第九章时,有个自动化测试,其实就是类似于boost测试,调试中,有些问题,没有说清楚,或者方法不对,我用我的理解写下过程,以免忘记了,都是套路。
1,测试类头文件放在public下,.cpp放在private里,要不没法测试,我这里默认了是Immdiate目录,中间文件,所以要改目录
2,按照一般类的添加方式即可,加上相关头文件,书上没有写,当然我是个好人,哈哈,所以加上,废话不多说,先上代码
头文件
#pragma once
#include "HAL/Runnable.h"
class FRunnableTestThread_ : public FRunnable
{
public:
FRunnableTestThread_(int16 index);
~FRunnableTestThread_();
virtual bool Init() override;
virtual uint32 Run() override;
virtual void Exit() override;
private:
int16 _index;
};
实现文件
#include "../Public/FRunnableTestThread_.h"
#include "Logging/LogMacros.h"
#include "Misc/AutomationTest.h"
DEFINE_LOG_CATEGORY_STATIC(TestLog, Log, All)
FRunnableTestThread_::FRunnableTestThread_(int16 index)
{
_index = index;
}
FRunnableTestThread_::~FRunnableTestThread_()
{
}
bool FRunnableTestThread_::Init()
{
UE_LOG(TestLog, Log, TEXT("Thread %d init"), _index);
return true;
}
uint32 FRunnableTestThread_::Run()
{
UE_LOG(TestLog, Log, TEXT("Thread %d Run : 1"), _index);
_sleep(10.0f);
UE_LOG(TestLog, Log, TEXT("Thread %d Run : 2"), _index);
_sleep(10.0f);
UE_LOG(TestLog, Log, TEXT("Thread %d Run : 3"), _index);
_sleep(10.0f);
return 0;
}
void FRunnableTestThread_::Exit()
{
UE_LOG(TestLog, Log, TEXT("Thread %d Exit"), _index);
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FFRunnableTest_, "MyTest_.PublicTest.RunnableTest", EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter)
bool FFRunnableTest_::RunTest(const FString& Parameter)
{
FRunnableThread::Create(new FRunnableTestThread_(0), TEXT("TestThread0"));
FRunnableThread::Create(new FRunnableTestThread_(1), TEXT("TestThread0"));
FRunnableThread::Create(new FRunnableTestThread_(2), TEXT("TestThread0"));
return true;
}
3,编译并启动程序,这里和书就对上了。一步步截图
从这里可以看到,出现了测试名称MyTest_,这个MyTest_在哪里呢?返回去看cpp文件,IMPLEMENT_SIMPLE_AUTOMATION_TEST(FFRunnableTest_, "MyTest_.PublicTest.RunnableTest", EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter)
MyTest_.PublicTest.RunnableTest",就是这个
在这项点上对勾,点击开始测试
可以看到,确实断点击中了测试用例的代码,输出窗口也出现了相应测试消息,
那么被测试的类中的方法到底被测试了么?再按F5运行
发现确实击中了bool FRunnableTestThread_::Init(),说明测试有效。
去掉断点,直接走完。
编辑器的信息日志显示成功测试,
输出窗口也如我们所愿,就这样吧。