我正在尝试验证我正在测试的类调用正确的依赖类的方法.所以我试图匹配方法参数,但我并不真正关心这个测试中的实际值,因为我不想让我的测试变脆.
但是,我遇到了麻烦,因为Mockito决定我期待的行为是一个错误:https://github.com/mockito/mockito/issues/134
那么为可能为null的参数定义匹配器的正确方法是什么?
问题#134"已修复",此代码失败,因为匹配器仅在第一种情况下匹配.如何在所有4种情况下定义匹配器?
MyClass c = mock(MyClass.class);
c.foo("hello", "world");
c.foo("hello", null);
c.foo(null, "world");
c.foo(null, null);
verify(c, times(4)).foo(anyString(), anyString());
Run Code Online (Sandbox Code Playgroud) 我正在使用Thymeleaf与Spring-Boot一起打包.这是主要模板:
<div class="container">
<table th:replace="fragments/resultTable" th:if="${results}">
<tr>
<th>Talent</th>
<th>Score</th>
</tr>
<tr>
<td>Confidence</td>
<td>1.0</td>
</tr>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
它使用这个片段:
<table th:fragment="resultTable">
<tr>
<th>Talent</th>
<th>Score</th>
</tr>
<tr th:each="talent : ${talents}">
<td th:text="${talent}">Talent</td>
<td th:text="${results.getScore(talent)}">1.0</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
只有存在结果对象时,该片段才有效.这对我来说很有意义.因此,基于文档中的语法,我将th:if语句添加到主模板文件中.但是,当我在没有对象的情况下访问模板时,我仍然会收到此错误
Attempted to call method getScore(com.model.Talent) on null context object
Run Code Online (Sandbox Code Playgroud)
该th:if语句是否应该阻止访问该代码?
填充结果对象时模板仍然可以正常工作,但是如何在没有表的情况下渲染null case?
我最近看到 Jakob Jenkov 写的一篇关于丰富异常的文章。我真的很喜欢这个主意!
我已经成为一名 Java 开发人员 4 年了,但我仍然对试图弄清楚如何处理第三方库抛出的所有 SQLExcepions、IOException 和随机异常感到非常恼火。我最终花了很多心思思考何时合适重新抛出异常,或者将其包装为自定义异常,但如果我编写自定义异常,那么我应该放置它吗?与我正在编写的类在同一个包中,还是在中央“例外”包中?我什至尝试过将自定义异常声明为内部类,因为它们通常看起来非常一次性。
无论如何,Jenkov 的想法概述如下: http: //tutorials.jenkov.com/java-exception-handling/exception-enrichment.html
正如他所概述的那样,使用一个可丰富的例外似乎对我来说非常有吸引力,因为它似乎可以轻松地回避我的大部分挫败感。但我认为我从未见过它在我使用过的任何库中使用过。这是有原因的吗?我所遗漏的这种方法是否存在重大缺陷?
简单总结:
public class AppException extends Exception{
public AppException(String errCode, String context, String userMessage, Throwable t){}
public AppException(String, errCode, String context, String userMessage) {}
public void addInfo(String errCode, String context, String userMessage){}
}
public class MyApp {
public static void main(String [] args) {
MyApp app = new MyApp();
app.start(args[0], args[1]);
}
public void start(String username, String password) {
try {
User user = loginController.login(username, …Run Code Online (Sandbox Code Playgroud) 我试图理解在“流文档”中发现的警告。我已经习惯了使用forEach()作为通用迭代器。这导致我编写这种类型的代码:
public class FooCache {
private static Map<Integer, Integer> sortOrderCache = new ConcurrentHashMap<>();
private static Map<Integer, String> codeNameCache = new ConcurrentHashMap<>();
public static void populateCache() {
List<Foo> myThings = getThings();
myThings.forEach(thing -> {
sortOrderCache.put(thing.getId(), thing.getSortOrder());
codeNameCache.put(thing.getId(), thing.getCodeName())
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子。我了解该代码违反了Oracle关于有状态lamda和副作用的警告。但是我不明白为什么这个警告存在。
运行此代码时,它似乎表现出预期的效果。那么,我如何打破这一点来说明为什么这是一个坏主意?
在某种程度上,我读到以下内容:
如果并行执行,则ArrayList的非线程安全性将导致错误的结果,而添加所需的同步将导致争用,从而削弱了并行性的优势。
但是,谁能增加清晰度以帮助我理解警告?
我正在为Maven项目开发多分支管道。我正在尝试遵循Jenkins文档所引用的标准CI步骤,即构建,测试和部署。但是,maven在将这些步骤视为谨慎的步骤时似乎并不很好。
到目前为止,我有:
stages {
stage('Test') {
steps {
sh "mvn -B clean verify"
}
}
stage('Deploy') {
when {
branch 'master'
}
steps {
sh "mvn -B deploy"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样,完整版本将运行两次,一次在Test阶段中,一次在Deploy阶段中。不好意思,这要感谢Google Web Toolkit,因为它很耗时,但是这是一个单独的问题。
有没有一种方法可以优雅地跳过Deploy阶段中较早的Maven生命周期步骤并跳至部署目标?
我能想到的唯一其他选择是
stages {
stage('Test') {
when {
// Some expression that states "not master"
}
steps {
sh "mvn -B clean verify"
}
}
stage('Test-and-Deploy') {
when {
branch 'master'
}
steps {
sh "mvn -B deploy"
}
} …Run Code Online (Sandbox Code Playgroud) 我已被添加到另一个工作团队。两个团队都使用自己的 Nexus 服务器,并为我提供了自己的设置文件,因此目前我必须做大量的工作来确保我使用正确的 settings.xml 文件来构建项目。有没有好的方法来合并这些文件?我一直在浏览 Maven 文档,但感到非常困惑。设置文件如下(已删除识别信息)
团队 1 设置文件
<settings>
<mirrors>
<mirror>
<id>Nexus</id>
<name>Company Nexus Public Mirror</name>
<url>http://build.company.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<servers>
<server>
<id>snapshots</id>
<username>deployment</username>
<password>password1</password>
</server>
<server>
<id>releases</id>
<username>deployment</username>
<password>password2</password>
</server>
</servers>
<activeProfiles>
<activeProfile>jenkins</activeProfile>
</activeProfiles>
</settings>
Run Code Online (Sandbox Code Playgroud)
团队 2 设置文件
<settings>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://domain.company.com:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository> …Run Code Online (Sandbox Code Playgroud) 我正在努力围绕 Observable 进行单元测试,使其按照我期望的方式运行。我使用 Observable 本质上只是为了通知进程已完成。注销函数中还没有异步代码,但是当我实现所有逻辑时就会有。我不需要可观察者返回任何数据,我只是希望它调用订阅者作为注销完成的信号。
\n\n问题是我的单元测试显示订阅者从未被实际调用。我通常使用 async/await 进行工作,具有讽刺意味的是,Observables 往往会因为做这样的事情而让我头疼,但我正在努力在前端变得更好,而前端似乎更喜欢 Observables。
\n\n这是我正在搭建的一个新的 Angular 9 应用程序。单元测试在 Jest 中运行,我通过 Wallaby 运行它们。
\n\n这是我的故障排除:
\n\n我故意破坏了该功能来验证我的单元测试是否有效。
\n\n\n\n我的测试第 63 行上的灰色框是 Wallaby,表明测试从未执行过该行。所以测试自然会通过,因为断言从未被检查过。
\n\n如果我更改可观察对象以返回一个值,我至少会得到要执行的行......有点。
\n\n\n\n但我没有从我的模拟中收到预期的失败消息。它应该报告“预期clearSession()被调用1次,为0”
\n\n所以我运行 Jest 只是为了看看发生了什么,我得到:
\n\nFAIL src/app/auth/auth.service.spec.ts\n\xe2\x97\x8f AuthService \xe2\x80\xba logout \xe2\x80\xba should destroy the session\n\n1 timer(s) still in the queue.\n\n at node_modules/zone.js/dist/fake-async-test.js:621:31\n at ZoneDelegate.Object.<anonymous>.ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:386:30)\n at ProxyZoneSpec.Object.<anonymous>.ProxyZoneSpec.onInvoke (node_modules/zone.js/dist/proxy.js:117:43)\n at ZoneDelegate.Object.<anonymous>.ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:385:36)\n at Zone.Object.<anonymous>.Zone.run (node_modules/zone.js/dist/zone.js:143:47)\nRun Code Online (Sandbox Code Playgroud)\n\n让事情变得很奇怪......如果我修复这个功能,一切都会很高兴!但只要 Observable 返回一个值,即使我只是使用 Observable 来通知进程何时完成。但我无法让我的实际断言失败,它失败是因为一些看似无关的事情(队列中的计时器?无论这意味着什么)。
\n\n\n\n该verify函数源自该函数 …
我正在尝试设置 GoLand 以使用 WSL 2,如本指南中所示:https://www.jetbrains.com/help/go/how-to-use-wsl-development-environment-in-product.html
我已经按照 GoLang 网站上的 linux 说明在 Ubuntu 发行版中安装了 Go,并go version打印出了我下载的版本,因此看起来 Go 正在 WSL 中运行。
所以现在我尝试在 GoLand 中创建一个新项目,但出现错误,这似乎是由于 GoLand 中未加载 SDK。该指南对此没有提供太多指导,因此我只是尝试添加本地 SDK。
当我选择时/usr/local/go,我收到一条错误消息,指出它不是有效的 SDK。

因此,我创建了该~/go目录,然后更新了我的.zshrc文件以导出GOPATH和GOROOT环境变量,即使它们在我运行时已经出现go env,这样做可以让它们在一个简单的调用中出现env。
但我仍然收到如上所述的无效 SDK 错误。
我是否遗漏了指南中未详细说明的配置步骤?我遇到了这篇关于创建符号链接来伪造预期目录结构的旧帖子。我还没有这样做,因为这是一篇非常旧的帖子,有评论说这个问题已经被修复,而且看起来是一个非常奇怪的解决方案。
我正在建立一个新项目。我已经通过 NPM 安装了 Angular 和 Material。然后我从此页面设置一个工具栏: https: //material.angular.io/components/toolbar/overview
我复制/粘贴了示例工具栏之一:
navbar.component.html
<mat-toolbar color="primary">
<button mat-icon-button class="example-icon" aria-label="Example icon-button with menu icon">
<mat-icon>menu</mat-icon>
</button>
<span>My App</span>
<span class="example-spacer"></span>
<button mat-icon-button class="example-icon favorite-icon" aria-label="Example icon-button with heart icon">
<mat-icon>favorite</mat-icon>
</button>
<button mat-icon-button class="example-icon" aria-label="Example icon-button with share icon">
<mat-icon>share</mat-icon>
</button>
</mat-toolbar>
Run Code Online (Sandbox Code Playgroud)
布局整体看起来不错。但图标按钮上有边框。
它们似乎来自默认的 chrome 样式表。在开发工具中,它们具有继承自的边框和颜色属性user agent stylesheet
background-color: -internal-light-dark(rgb(239, 239, 239), rgb(59, 59, 59));
border-width: 2px;
border-style: outset;
border-color: -internal-light-dark(rgb(118, 118, 118), rgb(133, 133, 133));
border-image: initial;
Run Code Online (Sandbox Code Playgroud)
我尝试安装,normalize.css认为只需要设置浏览器默认值。但这对此没有任何影响。
文档说这mat-icon-button …
我有一个包含以下 KeySchema 的表:
KeySchema: [
{AttributeName: USER_ID,KeyType: HASH},
{AttributeName: COMPLETED,KeyType: RANGE}],
Run Code Online (Sandbox Code Playgroud)
用户 ID 只是一个整数,但COMPLETED它是创建记录时的时间戳。
我正在尝试使用以下代码检索记录:
Item item = tbl.getItem("USER_ID", "4216634082");
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
AmazonDynamoDBException: The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException...
Run Code Online (Sandbox Code Playgroud)
由于范围键是一个时间戳,所以在我找到记录之前我不知道它是什么。我如何实现这一目标?
angular ×2
java ×2
maven ×2
aws-sdk ×1
go ×1
goland ×1
java-stream ×1
javascript ×1
jenkins ×1
maven-3 ×1
mockito ×1
nexus ×1
observable ×1
spring-boot ×1
spring-mvc ×1
thymeleaf ×1
typescript ×1
unit-testing ×1
wsl-2 ×1