ue4多线程测试

时间:2024-05-22 10:18:32

看大象无形第九章时,有个自动化测试,其实就是类似于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,编译并启动程序,这里和书就对上了。一步步截图ue4多线程测试

ue4多线程测试

 

从这里可以看到,出现了测试名称MyTest_,这个MyTest_在哪里呢?返回去看cpp文件,IMPLEMENT_SIMPLE_AUTOMATION_TEST(FFRunnableTest_, "MyTest_.PublicTest.RunnableTest", EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter)

MyTest_.PublicTest.RunnableTest",就是这个

在这项点上对勾,点击开始测试

ue4多线程测试

 

可以看到,确实断点击中了测试用例的代码,输出窗口也出现了相应测试消息,

那么被测试的类中的方法到底被测试了么?再按F5运行

ue4多线程测试

发现确实击中了bool FRunnableTestThread_::Init(),说明测试有效。

去掉断点,直接走完。

ue4多线程测试

编辑器的信息日志显示成功测试,

ue4多线程测试

输出窗口也如我们所愿,就这样吧。