小编Gra*_*ham的帖子

C++构建系统 - 使用什么?

我正在考虑用C++开始一个新项目 - 最初只是在我自己的时间 - 我正在调查可用的构建系统.似乎答案是"很多,而且它们都很可怕".

我特别需要的功能是:

  1. C++ 11支持
  2. 跨平台(Linux作为主要目标,但至少能够在Windows上构建)
  3. 体面的单元测试支持
  4. 支持多个模块以分离代码
  5. 支持代码生成(使用asn1c或protobuf - 尚未100%确定)
  6. 易于维护

现在,我知道我可以轻松地完成1-4个使用CMake和Autotools的人.可能还有SCons和Waf以及其他几个人.问题是我从来没有弄清楚如何使用它们正确地进行代码生成 - 这是在第一次运行构建过程之前不存在的源文件,因此构建系统必须能够转换为可执行代码的源文件但实际上并没有知道,直到构建开始......(ASN1C特别生成了几十个必须能够一起工作的头文件和源文件,并且生成的实际文件集取决于你的asn文件的内容)事实上,这些都不是特别容易维护 - CMake和Autotools有他们自己需要管理的大量脚本,Waf和Scons要求任何与他们一起工作的人都有很好的python知识(I不要与他们合作......

那么 - 对于这样的东西,建议使用哪些构建系统?或者我现在还会遇到make文件和shell脚本吗?

c++ build

132
推荐指数
7
解决办法
6万
查看次数

如何从FreeMarker模板调用对象上的java方法?

是否可以调用从Freemarker模板获取参数的方法?

我有一个对象模型,我试图用Freemarker渲染到一个网页.其中一个对象有一个获取其内容子列表的方法 - 获取用于过滤列表的参数:

public List getunits(final String type);

我知道在JSP中你不能直接这样做,但是你可以编写自定义函数来实现你想要的结果.你如何在Freemarker中解决这个问题?编写自定义函数是一样的吗?或者有没有办法实际调用这种功能?

java freemarker

42
推荐指数
2
解决办法
5万
查看次数

OAuth2/OpenID Connect受保护API的自动API测试

我正在研究一个我们计划首先执行API的新项目,以便我们可以在其上实现Web和本机应用程序,并允许第三方集成.到目前为止所有相当标准.

我们还希望为API提供一整套自动化测试,以确保其无回归地工作,并确保其满足要求.同样,相当标准,但因为我们正在测试API,我们将使用代码内HTTP客户端而不是Web浏览器.

我们一直在寻找oauth2/OpenID Connect来促进API的身份验证和授权 - 基本上,客户端可以进行身份​​验证,获取访问令牌,然后使用它来访问所有API资源.

我正在努力解决的问题是让自动化测试与oauth2部分协同工作以实现调用API的好方法.第一个想法是使用"client_credentials"或"密码"授权类型,它们似乎都适用于我们想要的东西,但它们根本没有涵盖在OpenID Connect规范中,当然还有"密码" "无论如何,至少它通常不被认为是个好主意.

这是实现这一目标的最佳方式,还是有其他最佳实践可用于其他流程,但没有Web浏览器?

编辑:在(更多)阅读之后,我有了一个新的计划.完全脱机运行测试,使用针对单独数据库的单独部署,并在测试运行之前将数据直接播种到数据库中,然后使用标准OpenID Connect流,但使用:

  • 出于测试目的在数据库中标记的客户端.这是一个重要的部分,只有在客户端可以直接注册到数据库而不通过业务逻辑的情况下才有可能.
  • 提示=无
  • login_hint =获取访问令牌的用户名
  • 包含"测试"的范围

然后,系统可以检测到这种事实组合,并自动验证提供的用户名,而无需通过浏览器.

这看起来合情合理吗?或者,还有更好的方法?

acceptance-testing openid-connect e2e-testing oauth2

18
推荐指数
1
解决办法
3008
查看次数

Redux - 异步加载初始状态

我试图找出最简洁的方法来加载我的Redux商店的初始状态,当它来自API调用时.

我知道提供初始状态的典型方法是在页面加载时生成服务器端,并将其作为简单对象提供给Redux createStore().但是,我正在编写一个我计划在Electron中打包的应用程序,所以这不起作用.

到目前为止,我能够提出的最好的方法是在创建将要去商店的初始状态的商店后立即触发操作 - 要么检索整个初始状态的一个操作,要么执行多个操作每个都检索商店的一部分的初始状态.这意味着我的代码看起来像:

const store = createStore(reducer, Immutable.Map(), middleware);
store.dispatch(loadStateForA());
store.dispatch(loadStateForB());
store.dispatch(loadStateForC());
Run Code Online (Sandbox Code Playgroud)

虽然这会起作用,但它看起来有点粗糙,所以我想知道是否有一些更好的替代品,我错过了?

javascript flux redux

9
推荐指数
2
解决办法
5569
查看次数

在Java 8 Streams上实现自定义中间操作

我正在尝试弄清楚如何在Java 8 Stream上实现自定义的中间操作。看来我被封锁了:(

具体来说,我想获取一个流并返回直到并包括具有特定值的第一个条目的每个条目。而且我想在此之后停止生成任何内容-使其短路。

它正在对输入数据进行一系列验证检查。如果有一个错误,我想停在第一个错误上,但是我想在路上整理警告。而且由于这些验证检查可能很昂贵-例如涉及数据库查找-我只想运行所需的最小设置。

因此,代码将类似于:

Optional<ValidationResult> result = validators.stream()
    .map(validator -> validator.validate(data))
    .takeUntil(result -> result.isError()) // This is the bit I can't do
    .reduce(new ValidationResult(), ::mergeResults);
Run Code Online (Sandbox Code Playgroud)

似乎是我应该可以做一些与ReferencePipeline.StatefulOp,不同之处在于它的所有包范围,所以我不能扩展。所以我想知道实现这一目标的正确方法是什么?还是有可能?

还要注意-这需要使用Java 8,而不是9+,因为由于各种不相关的原因我们还没有出现。

干杯

java java-stream

8
推荐指数
1
解决办法
171
查看次数

Gradle下的JUnit 5,具有多个源集

我有一个项目,我正在整理,我想使用JUnit 5.我已经对单元测试工作正常了.

但我确实有多个测试源集 - 我还有一个用于验收测试的附加测试源集.我正在努力弄清楚如何让JUnit 5运行单元测试 - 在src/test中定义 - 在一个任务和验收测试 - 在"acceptanceTest"sourceSet中定义并位于"src/acceptance"中 - 在另一个任务中任务.

我之前已经使用过JUnit 4和Cucumber,但是JUnit 5插件似乎不想像这样工作.

的build.gradle:

buildscript {
  ext {
    jackson_version = "2.9.0.pr4"
    // IntelliJ needs M4
    junitJupiter_version = "5.0.0-M4"
    junitPlatform_version = "1.0.0-M4"
    kotlin_version = "1.1.3-2"
    slf4j_version = "1.7.25"
    spring_version = "4.3.10.RELEASE"
    springBoot_version = "1.5.4.RELEASE"
    springBootAdmin_version = "1.5.2"

    runAcceptance = System.properties['noAcceptance'] == null
  }

  repositories {
    mavenCentral()
    jcenter()
  }

  dependencies {
    classpath "com.github.ben-manes:gradle-versions-plugin:0.15.0"
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
    classpath "org.junit.platform:junit-platform-gradle-plugin:$junitPlatform_version"
    classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBoot_version"
  }
}

plugins {
  id "com.github.ben-manes.versions" version …
Run Code Online (Sandbox Code Playgroud)

java junit gradle junit5

7
推荐指数
3
解决办法
1685
查看次数