我想使用Hamcrest的hasItems
与"实际"的集合,是一个ArrayList<? extends SomeInterface>
上
assertThat(ArrayList<? extends SomeInterface>, hasItems(InstanceOfSomeInterface))
Run Code Online (Sandbox Code Playgroud)
编译器说:
assertThat(T, Matcher<T>)
类型中的方法Assert
不适用于参数(ArrayList<capture#9-of ? extends MyInterface>, Matcher<Iterable<MyInterface>>)
出了什么问题?我该怎么办(我真的想在这里使用Hamcrest)?
我在我的gwt-webapp的服务器端使用guava的缓存.但要正确配置缓存我需要知道一些"遥测".首先,我需要知道一个缓存条目需要多少内存.到目前为止,我尝试了jconsole和visualvm.问题是,我不知道在哪里看.我查找了ConcurrencyHashMap及其条目,但找不到正确数量的实例.
那么分析一个(番石榴)缓存有什么好的,可能很简单的方法呢?
(目前我还没准备好支付一个工具来获得一个近似/平均大小的cach(条目))
讨论状态摘要:Aaron Digulla建议使用弱引用,让Java做管理内存的工作.但是在之前的一个问题中,由于使用弱引用的性能问题,人们建议"调整,监视,调整"缓存.
更新 确定我的问题可能是错误的 - 我不想知道有关缓存或其开销的一些事情.我想知道给定对象的实例有多大 - 配置缓存(在本例中为guava).我必须回答的第一个问题是:我可以获得内存中的所有实例(100%命中率)或者需要多少内存.如果可能,则不需要缓存配置.如果所有对象都会占用太多内存,我必须考虑配置.我希望有一个工具可以说明对象的平均内存占用情况.
在我们的代码中,我们经常检查参数Preconditions
:
Preconditions.checkArgument(expression, "1" + var + "3");
Run Code Online (Sandbox Code Playgroud)
但有时,这个代码经常被调用.这会对性能产生显着的负面影响吗?我们应该切换到
Preconditions.checkArgument(expression, "%s%s%s", 1, var, 3);
Run Code Online (Sandbox Code Playgroud)
?
(我希望大多数情况下条件都是正确的.假意味着错误.)
我开始了我的第一个纯前端项目.我想将它部署到java/maven.所以我建立了一个正常的战争项目:
? package.json
? pom.xml
? tsconfig.json
? typings.json
?
?
????src
? ????main
? ????resources
? ????webapp
? ? index.html
? ?
? ????app
? ? app.component.ts
? ? main.ts
? ?
? ????css
? ? styles.css
? ?
? ????WEB-INF
? web.xml
?
Run Code Online (Sandbox Code Playgroud)
我的问题是如何设置index.html /相对于包的源的路径.JSON?由于这是一个角度/打字稿项目,因此还有一些打字稿特定的东西.但我希望在包装json中一劳永逸地设置"源"路径?!
我也不确定我是否要直接在"webapp"中部署这些东西,因为有编译步骤.因此,欢迎任何关于如何构建用于maven/war部署的pur前端项目的建议.
我刚刚将我的项目从 Spring Boot 2.1 迁移到 2.3,因此现在有 JUnit 5(带有 Vintage)(还包括版本 3.3.3 的 mockito-core 和 mockito-junit-jupiter)。虽然所有 JUnit 4 测试工作正常,但我的第一个 JUnit 5 测试工作不正常:
@ExtendWith(MockitoExtension.class)
public class SomeTest {
@InjectMocks
private Some to;
@Mock
private SomeProperties properties;
@Test
public void applied() {
....
//properties is null -> NPE
when(properties.getSome()).thenReturn("some");
....
}
Run Code Online (Sandbox Code Playgroud)
没有注入模拟(when 语句中的 NPE)。如果我切换到旧的 JUnit 4 样式,@RunWith(MockitoJUnitRunner.class)
一切正常。
那么可能使用的是旧跑步者还是复古跑步者?
如何解决此问题并使用“@ExtendWith”进行测试?我以为我可以逐步迁移 - 让新测试使用 junit5 runner 运行。
我刚刚开始一个结合 Spring Boot 和 Apache Camel 的项目(这似乎是一个非常好的组合)。
关于使用 JUnit 5 进行测试,Google 提供了此页面。@CamelSpringTest
如果您想同时拥有 Spring 和 Camel 的注释(我想要的),建议使用。
在页面的 和 处,有关于 JUnit 4 测试迁移的建议:
@RunWith(CamelSpringRunner.class) 的用法应替换为 @CamelSpringTest ... @RunWith(CamelSpringBootRunner.class) 的用法应替换为 @CamelSpringBootTest
我的问题是针对新项目/测试:两者在使用方面有什么区别。
代码当然存在差异,但我不知道原因是什么:
骆驼弹簧测试:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
@ExtendWith(SpringExtension.class)
@BootstrapWith(CamelTestContextBootstrapper.class)
@TestExecutionListeners(
value = {
CamelSpringTestContextLoaderTestExecutionListener.class,
StopWatchTestExecutionListener.class
},
mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)
public @interface CamelSpringTest {
}
Run Code Online (Sandbox Code Playgroud)
CamelSpringBoot测试
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
@ExtendWith(SpringExtension.class)
@TestExecutionListeners(
value = {
CamelSpringTestContextLoaderTestExecutionListener.class,
CamelSpringBootExecutionListener.class,
StopWatchTestExecutionListener.class
},
mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)
public @interface CamelSpringBootTest { …
Run Code Online (Sandbox Code Playgroud) 我刚刚通过搜索缓存API 找到了Guava(它非常适合我的需求).但是在阅读wiki和Javadoc时出现了一个问题- CacheBuilder可以采用什么设置的默认值?该Javadoc中的国家"这些功能都是可选的"和"创建一个新的CacheBuilder实例使用默认设置,包括强大的键,坚定的价值观,以及任何形式的自动驱逐."
在我看来,一个很好的默认值maximumSize
是相对于Runtime.getRuntime().freeMemory();
最后,我想要一个使用给定系统上可用内存的缓存.所以我需要一个驱逐策略,询问有多少freeMemory()
可用(可能相对于Runtime.getRuntime().maxMemory()
)
我只是用Selenium来完成我的第一步.我成功地设置了一个测试(Firefox驱动程序),在我的Jenkins上使用Selenium网格运行(使用Jenkins-Selenium-Grid插件).我还在运行Jenkins的机器(Server2003 64位)上安装了Chromdriver插件和Chrome本身.Chrome已为所有用户安装(在C:\ Program Files(x86)\ Google\Chrome\Application\chrome.exe中).问题是:我尽快尝试使用Chromedriver
UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
Run Code Online (Sandbox Code Playgroud)
由于Firefox测试运行良好,它必须是"浏览器启动"的问题?!所以第一个问题是:Chromdriver假定的chrome二进制文件的默认位置是什么?第二个问题:如何解决这个问题?是否有环境属性设置?或者我可以简单地将PATH设置为chrome.exe的位置.
我需要一个gwt项目的maven项目配置.配置应该在Eclipse(3.7!?)和控制台(mvn,jenkins ......)中运行.
我试过用gwt提供的webAppCreator:
webAppCreator.cmd -noant -maven -XnoEclipse -out WebAppCreated com.example.MyApp
Run Code Online (Sandbox Code Playgroud)
和gwt-maven-plugin Archetype.这两个项目在Eclipse中看起来非常相似,但它们具有非常不同的配置(不同的目录,并使用不同的插件).我认为如果项目发展(添加测试,资源......),它们会表现得非常不同.因为原型配置要小得多,我认为它更接近maven惯例 - 但这也更好吗?
两种配置的有效差异是什么?
你会建议什么配置作为起点?
我刚刚在我的java ee jax-rs应用程序中添加了一个Websocket端点.在Jax-Rs端点中,我可以通过SecurityContext访问用户的角色.
但是在websocket中我不能注入上下文的东西.那么如何知道试图打开websocket会话的用户的角色呢?
java ×5
guava ×3
junit ×2
maven ×2
spring-boot ×2
angular ×1
apache-camel ×1
caching ×1
eclipse ×1
generics ×1
gwt ×1
hamcrest ×1
heap-memory ×1
java-ee ×1
jenkins ×1
junit5 ×1
memory ×1
mockito ×1
npm ×1
performance ×1
profiling ×1
security ×1
selenium ×1
spring ×1
typescript ×1
war ×1
websocket ×1
wildfly ×1