小编She*_*eph的帖子

CMake测试库,标题位置问题

所以,我正在为一个项目创建一个库,其中包含一些标题库,这些标题是库的接口,其余的是库本身的私有.所以对于我的库,CMAKE部分看起来像:

add_library(${PROJECT_NAME} ${PROJECT_SOURCES} "${PROJECT_BINARY_DIR}/libversion.h")
add_library(my::lib ALIAS ${PROJECT_NAME})

target_include_directories(${PROJECT_NAME} 
    PRIVATE ${Boost_INCLUDE_DIRS}
    PRIVATE ${PROJECT_BINARY_DIR} #to locate libversion.h
    INTERFACE ${PUBLIC_INCLUDE_HEADERS}
    )
Run Code Online (Sandbox Code Playgroud)

然后我的测试目标:

add_executable(${TEST_NAME} ${TEST_SOURCES})
add_test(NAME LibTest COMMAND ${TEST_NAME})

target_link_libraries(${TEST_NAME} 
    PRIVATE ${Boost_LIBRARIES}
    PRIVATE my::lib
    )
Run Code Online (Sandbox Code Playgroud)

但这只允许我测试我的公共接口.如果我想对我的库进行单元测试,我将如何声明对项目中剩余标题的访问lib?我看到它的方式是添加一个完整的新目标my::lib::testing,它将接口声明为当前源目录(当前所有标头所在的位置,将公共分离私有标头是我尚未处理的另一个问题).所以像这样:

add_library(${PROJECT_NAME}_TESTING ${PROJECT_SOURCES} "${PROJECT_BINARY_DIR}/libversion.h")
add_library(my::lib::testing ALIAS ${PROJECT_NAME}_TESTING)

target_include_directories(${PROJECT_NAME}_TESTING
    PRIVATE ${Boost_INCLUDE_DIRS}
    PRIVATE ${PROJECT_BINARY_DIR} #to locate libversion.h
    INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
    )
Run Code Online (Sandbox Code Playgroud)

但这需要根据用途构建两个不同的目标.一个用于我的应用程序链接到别名my::lib,一个用于单元测试,链接别名my::lib::testing.

所以我的问题是,如何干净地分隔标题,以便我只能INTERFACE显示目标显示的标题,但仍然可以通过我的测试目标访问剩余的标题?

c++ unit-testing cmake

7
推荐指数
1
解决办法
535
查看次数

FindGLM.cmake不在glm 0.9.7中,它是一种在CMAKE中查找库的弃用方法吗?

通过查看GLM 0.9.7的最新版本,我在任何地方都看不到FindGLM.cmake文件,过去常常在CMAKE中包含GLM.我总是可以使用在网上找到它的旧版本,但下面的提交让我难过:

https://github.com/g-truc/glm/commit/62a7daddcf082f754000fc5e42d7bcdf93c895f7

提交消息是"删除过时的FindGLM".那么,开发人员只是转储它还是实际上有一种在CMAKE中查找库的新方法?

cmake glm-math

6
推荐指数
1
解决办法
1979
查看次数

存储中的模拟文件以在 Laravel 中下载

有没有办法使用 LaravelStorage::fake()方法模拟文件?

我已经使用https://laravel.com/docs/5.7/mocking#storage-fake作为我测试的基础,它适用于上传。但是我的下载测试很难看,因为我每次都必须先使用模拟上传运行我的上传路线UploadedFile::fake()->image('avatar.jpg')。有没有办法跳过那部分并模拟文件直接存在于假存储系统中?

public function testAvatarUpload()
{
    Storage::fake('avatars');

    // This is the call I would like to change into a mocked existing uploaded file
    $uploadResponse = $this->json('POST', '/avatar', [
        'avatar' => UploadedFile::fake()->image('avatar.jpg')
    ]);

    // Download the first avatar
    $response = $this->get('/download/avatar/1');

    $response->assertStatus(200);
}
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-5.6

6
推荐指数
2
解决办法
9386
查看次数

如何使用get属性扩展typescript类?

我得到一个具有类型的对象的实例A.如何在Typescript中使用getter函数扩展它?添加我做的功能

A.prototype.testFunction = function () {
  if(this.something) {
    return this.something;
  }
 return null;
}
Run Code Online (Sandbox Code Playgroud)

我在类index.d.ts文件中扩展类型,例如:

interface A {
    testFunction (): SomeType|null;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要作为一个getter函数出现而不仅仅是一个函数,我应该如何添加呢?

我试过看,Object.defineProperty()但是Typescript本身似乎并不太高兴使用那个,指的this是以下代码中的错误实例:

Object.defineProperty(A.prototype, "testGet", {
    get: function () {
        if(this.something) { // <== this appears to not refer to type A
          return this.something;
        }
        return null;
    },
    enumerable: false,
    configurable: true
}); 
Run Code Online (Sandbox Code Playgroud)

typescript

3
推荐指数
1
解决办法
549
查看次数

Laravel:如果运行某个中间件,则向模型添加全局范围

是否可以根据是否应用中间件来启用全局范围?

我有一个全局范围,我想为我网站的某个部分启用并禁用其余部分(客户与管理区域),我在想您是否可以通过检查中间件“EnableGlobalScopeMiddleware”是否运行来做到这一点?

php laravel

3
推荐指数
1
解决办法
2292
查看次数

标签 统计

cmake ×2

laravel ×2

php ×2

c++ ×1

glm-math ×1

laravel-5.6 ×1

typescript ×1

unit-testing ×1