我想整合一些突变测试,以确保我的junit测试的质量.我希望将结果放在我项目的声纳仪表板中.
该声纳pitest插件似乎做我想做的,但也有一些问题与Maven 3,它仍然是正在开发中.
有没有人试过这个插件?还有其他选择吗?
我在内部类中创建了一个内部类:
public class EnclosingClass {
public class InnerClass {
private EnclosingClass getEnclosing() {
return EnclosingClass.this;
}
public class InnerInnerClass {
private InnerClass getEnclosing() {
return InnerClass.this;
}
private EnclosingClass getEnclosingOfEnclosing() {
return EnclosingClass.this;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我很惊讶java允许InnerInnerClass直接访问EnclosingClass.这个代码是如何在Java内部实现的?
在InnerInnerClass保持两个指针(一个在InnerClass和其他的EnclosingClass)或InnerInnerClass访问EnclosingClass过InnerClass?
我想测试安装的网络驱动器上是否存在文件.
我用这个简单的代码写了File.exists.
import java.io.File;
public class NetworkDrive {
public static void main(String[] args) {
System.err.println(new File("/Volumes/DATA/testedFile.txt").exists());
}
}
Run Code Online (Sandbox Code Playgroud)
它大部分工作正常,但我发现这个代码有问题的边缘情况.如果驱动器已安装且由于某种原因网络连接失败,则程序会挂起很长时间(10分钟).
time java NetworkDrive
false
real 10m6.114s
user 0m0.431s
sys 0m0.949s
Run Code Online (Sandbox Code Playgroud)
即使我尝试使用KILL信号杀死它,该过程仍在运行.
1875 ttys000 0:00.00 (java)
Run Code Online (Sandbox Code Playgroud)
问题是这样的java.nio:
Files.exists(Paths.get("/Volumes/DATA/testedFile.txt"));
Run Code Online (Sandbox Code Playgroud)
我在OS X Yosemite上使用java版本1.8.0_20.
我已经在窗格中缩放了一个节点。但是,窗格的布局没有考虑任何限制就考虑了边界。我希望它考虑到转换后的边界。
例如 :

和代码:
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.shape.Circle;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
public class HBoxApp extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
double scale = 0.75;
HBox box1 = createBox();
box1.getChildren().add(new Circle(20));
box1.getChildren().add(new Label("Test without any scale"));
HBox box2 = createBox();
Circle c2 = new Circle(20);
c2.setScaleX(scale);
c2.setScaleY(scale);
box2.getChildren().add(c2);
box2.getChildren().add(new Label("Test with the setScaleX/Y methods"));
HBox …Run Code Online (Sandbox Code Playgroud) 这些代码示例:
import java.util.Observer;
public class Main {
public static void main(String[] args) {
Observer observer = (o, arg) -> {
if (arg != null) {
System.out.println(arg);
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
import java.util.Observer;
public class Main {
public static void main(String[] args) {
Observer observer = (o, arg) -> {
try {
String test = (String) arg;
...
}
catch (ClassCastException e) {
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
不符合这个声纳规则:
只包含一个语句的Lamdbas不应该在一个块中嵌套这个语句:删除语句周围无用的花括号
我该怎么办呢?
我有一个JavaFX应用程序,我想测试它是否启动.我该怎么做呢?是否可以使用JUnit,或者TestFX可以帮助我吗?
我的主要问题是:如何在(成功)启动后立即关闭应用程序?
示例应用程序类:
public class MovieDB extends Application {
@Override
public void start(final Stage primaryStage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(MovieDBController.class.getResource("MovieDB.fxml"), ResourceBundle.getBundle("bundles/bundle", new Locale("en")));
Parent root = fxmlLoader.load();
Scene scene = new Scene(root, 1024, 768);
StyleManager.getInstance().addUserAgentStylesheet(getClass().getResource("/css/MovieDB.css").getPath());
primaryStage.setTitle("MovieDB");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud) 使用eclipse,我可以轻松地将静态调用转换为
import java.util.Arrays;
import java.util.List;
public class StaticImport {
public static void main(String[] args) {
List<String> list = Arrays.asList("hello", "world");
System.out.println(list);
}
}
Run Code Online (Sandbox Code Playgroud)
到静态导入:
import static java.util.Arrays.asList;
import java.util.List;
public class StaticImport {
public static void main(String[] args) {
List<String> list = asList("hello", "world");
System.out.println(list);
}
}
Run Code Online (Sandbox Code Playgroud)
我将光标放在方法名称(asList)上,然后按Ctrl-Shift-M(Add Import)。
现在,由于某些重构原因,我想删除静态导入并返回第一个代码:
List<String> list = Arrays.asList("hello", "world");
Run Code Online (Sandbox Code Playgroud)
请问有一个快捷的方法吗?
我有这个界面和简单的实现:
public interface Data {
}
import java.nio.file.Path;
import javax.annotation.Nullable;
import javax.inject.Inject;
import com.google.inject.assistedinject.Assisted;
public class SimpleData implements Data {
@Inject
public SimpleData(@Assisted @Nullable Path path) {
}
}
Run Code Online (Sandbox Code Playgroud)
我想Factory用guice 生成一个不同的方法.
import java.nio.file.Path;
import javax.annotation.Nullable;
public interface Factory {
Data create();
Data load(@Nullable Path path);
}
Run Code Online (Sandbox Code Playgroud)
但是以下模块配置:
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.assistedinject.FactoryModuleBuilder;
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(
binder -> binder.install(
new FactoryModuleBuilder().implement(Data.class, SimpleData.class)
.build(Factory.class)));
Data data = injector.getInstance(Factory.class).create(); …Run Code Online (Sandbox Code Playgroud) 我刚刚发现java 8允许引用具有更具体的返回类型和更一般参数的方法.
import java.util.function.Function;
public class MethodReferences {
public static Integer function(Object o) {
return 2;
}
public static void main(String[] args) {
Function<String, Object> function = MethodReferences::function;
}
}
Run Code Online (Sandbox Code Playgroud)
这非常灵活.
但为什么他们没有将此扩展到其他案例?
例如:
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, Object> function = function();
}
private static Function<Object, Integer> function() {
return new Function<Object, Integer>() {
@Override
public Integer apply(Object o) {
return 1;
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
编译失败:
Type mismatch: cannot …Run Code Online (Sandbox Code Playgroud) 我在使用Oracle的JavaFx HelloWorld应用程序时遇到一些问题:
public class HelloWorld extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
TestFx junit测试:
class MyTest extends GuiTest {
public Parent getRootNode() {
return nodeUnderTest;
}
Run Code Online (Sandbox Code Playgroud)
nodeUnderTest这个例子应该是什么?
我想将向量的每个元素与下一个进行比较。我找到了以下解决方案,但它不太可读。
struct Obj {
i: u32,
}
impl Obj {
fn is_valid_next(&self, next: &Obj) -> bool {
self.i + 1 == next.i
}
}
fn main() {
let data: Vec<Obj> = vec![Obj { i: 0 }, Obj { i: 2 }, Obj { i: 2 }];
let mut previous: Option<Obj> = None;
let mut is_valid = true;
for current in data.into_iter() {
match previous {
Some(p) => {
is_valid = p.is_valid_next(¤t);
if !is_valid {
break;
}
}
None => {} …Run Code Online (Sandbox Code Playgroud) 我有一个输入框,用户可以在其中输入名字和姓氏.我用html5模式进行验证.
但问题是当你把"西蒙"放在那时它没关系,但是如果你写"西蒙西蒙"那么它就不是了(可能问题在于两个单词之间的空间).我希望输入框允许两者
1.Username
2.名字和姓氏.
我的代码是
<input id="login_input_username" pattern="[a-zA-Z]{2,64}" class="login_input" type="text" name="user_full_name" onfocus="this.value=''" onblur="(this.value=='')? this.value='Firstname lastname':this.value;" value="Firstname lastname" required />
Run Code Online (Sandbox Code Playgroud)