为了测试我编码的私有方法之一,我需要模拟一个Singleton.
在使用PowerMockito测试了几种方法之后:
PowerMockito.mockStatic(UtilDatabaseSoldeAutoCdeCommon.class);
Mockito.when(UtilDatabaseSoldeAutoCdeCommon.getInstance()).thenReturn(mockDatabase);
Run Code Online (Sandbox Code Playgroud)
我永远不会嘲笑这门课.因此,我不能像在每个方法中那样测试我的方法,我访问数据库.
UtilDatabaseSoldeAutoCdeCommon定义如下:
public class UtilDatabaseSoldeAutoCdeCommon extends AbstractUtilDatabase {
private static UtilDatabaseSoldeAutoCdeCommon instance;
private UtilDatabaseSoldeAutoCdeCommon() {
super();
}
public static UtilDatabaseSoldeAutoCdeCommon getInstance() {
if(instance == null) {
instance = new UtilDatabaseSoldeAutoCdeCommon();
}
return instance;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我在调用getInstance()时调试了powermockito,但每次调用consructor时,它都会在尝试加载配置文件(不存在)时崩溃.
我确切地说,配置文件被定义为UtilDatabaseEnrichissement的absract父类中的常量,并在构造函数中使用.
我怎么测试这部分?
跑步时
mvn clean rpm:rpm
Run Code Online (Sandbox Code Playgroud)
我收到此错误:目标org.codehaus.mojo的参数'group':rpm -maven-plugin:2.1.5:rpm丢失或无效
我的父pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.brewspberry</groupId>
<artifactId>brewspberry-rpm-parent</artifactId>
<version>0.1.0-SNAPSHOT</version>
<name>brewspberry-rpm-parent</name>
<description>brewspberry-rpm-parent</description>
<packaging>pom</packaging>
<properties>
<rpm.install.basedir>/opt/tomcat</rpm.install.basedir>
<rpm.install.webapps>${rpm.install.basedir}/webapps</rpm.install.webapps>
<rpm.install.config>${rpm.install.basedir}/lib</rpm.install.config>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.build.group>Internet</project.build.group>
</properties>
<modules>
<module>brewspberry-regulator-algo</module>
<module>brewspberry-api</module>
<module>brewspberry-core</module>
<module>brewspberry-jbatches</module>
<module>brewspberry-webapp</module>
</modules>
<profiles>
<profile>
<id>rpm-build</id>
<activation>
<property>
<name>build-rpm</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>rpm-maven-plugin</artifactId>
<version>2.1</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>rpm</goal>
</goals>
<configuration>
<classifier>${rpm.classifier}</classifier>
<copyright>Biologeek</copyright>
<icon>src/main/resources/img/icon.png</icon>
<distribution>Brewspberry</distribution>
<targetOS>linux</targetOS>
<needarch>noarch</needarch>
<group>Internet</group>
<packager>${user.name}</packager>
<changelogFile>CHANGELOG</changelogFile>
<defaultDirmode>540</defaultDirmode>
<defaultFilemode>440</defaultFilemode>
<defaultUsername>tomcat</defaultUsername>
<defaultGroupname>tomcat</defaultGroupname>
<properties>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
<project.build.group>net.brewspberry</project.build.group>
</properties>
<requires>
<require>apache-tomcat >= 8.0.24</require>
</requires>
<mappings>
<mapping>
<directory>${rpm.install.webapps}/brewspberry-api</directory>
<sources> …Run Code Online (Sandbox Code Playgroud) 使用ngFor循环创建选项时,未选择ngModel的默认值
HTML:
<form style="margin : 20%;">
<div class="row">
<div class="form-group">
<label for="foo">K1 :{{keyboard | json}}</label>
<select [(ngModel)]="keyboard" name="foo" class="custom-select">
<option *ngFor="let a of foo" [ngValue]="a">{{a.name}}</option>
</select>
</div>
</div>
<div class="row">
<div class="form-group">
<label for="fooz">K2 :{{keyboard2 | json}}</label>
<select [(ngModel)]="keyboard2" name="fooz" class="custom-select">
<option [ngValue]="foo[0]">AZERTY</option>
<option [ngValue]="foo[1]">QWERTY</option>
</select>
</div>
</div>
<div class="row">
<div class="form-group">
<label for="fooa">K2 :{{keyboardStr | json}}</label>
<select [(ngModel)]="keyboardStr" name="fooa" class="custom-select">
<option [selected]="keyboardStr == 'AZERTY'" [ngValue]="AZERTY">AZERTY</option>
<option [selected]="keyboardStr == 'QWERTY'" [ngValue]="QWERTY">QWERTY</option>
</select>
</div>
</div>
<div class="row">
<div class="form-group">
<label for="fooa">K2-bis …Run Code Online (Sandbox Code Playgroud) 我有 2 个 JHipster 应用程序,每个应用程序都在一个子域(app1.domain.tld 和 app2.domain.tld)上运行。
在这两个应用程序中,用户都通过 Keycloak 登录。顺序如下:
如果用户已经登录域(*.domain.tld)的应用程序之一,自动登录用户(无需询问用户名和密码)的最佳方式是什么?
在了解 JSessionID 仅适用于生成它的应用程序之前,我尝试使用 JSessionID 作为全局令牌...
也许捕获 Keycloak 身份验证 cookie(在步骤 2 中返回)并在第二个应用程序上进行身份验证就可以解决问题?
从我在测试时看到的情况来看,在第一个应用程序上进行身份验证后,当我转到第二个应用程序时,Angular 401 HTTP 拦截器会使用会话令牌重定向到 keycloak 登录页面。因此,那时 Keycloak 应该看到我已经登录,并且应该将我重定向到我的第二个应用程序的主页。
我对吗 ?