JUnit 5不会在使用注释注释的测试类中调用我的方法@BeforeEach,其中我初始化测试中所需的测试对象的一些字段.当试图在测试方法(注释方法@Test)中访问这些字段时,我显然得到一个NullpointerException.所以我在方法中添加了一些输出消息.
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class TestClass {
private String s;
public TestClass() {
}
@BeforeEach
public void init() {
System.out.println("before");
s = "not null";
}
@Test
public void test0() {
System.out.println("testing");
assertEquals("not null", s.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
在运行测试的输出中,mvn clean test我从test0()注释@Test注释的方法中获取"测试"消息,但不打印"之前"消息.
Running de.dk.spielwiese.TestClass
!!!testing!!!
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0 sec <<< FAILURE!
de.dk.spielwiese.TestClass.test0() Time elapsed: 0 sec <<< FAILURE! …Run Code Online (Sandbox Code Playgroud) 我在使用javafx加载由三星Galaxy S7边缘拍摄的JPEG图像时遇到问题(图片可在https://www.dropbox.com/s/w6lvdnqwcgw321s/20171122_140732.jpg?dl=0获得).我正在使用Image类来加载图像.
import java.io.FileInputStream;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class JPEGProblem extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage window) throws Exception {
Image img = new Image(new FileInputStream("/path/to/image.jpg"));
if (img.getException() != null)
throw img.getException();
ImageView imgView = new ImageView(img);
window.setScene(new Scene(new Pane(imgView)));
window.show();
}
}
Run Code Online (Sandbox Code Playgroud)
试图加载图像的构造函数调用在错误流上打印以下错误消息:
2018年2月4日晚上11:48:23 com.sun.javafx.tk.quantum.PrismImageLoader2 $ PrismLoadListener imageLoadWarning警告:顺序JPEG的SOS参数无效
我从image对象获得的异常是一个IOException,其中包含以下消息:
不支持的标记类型0x65
我做了一些研究,事实证明,这是三星手机拍摄的全景图像的一个已知问题.正如在这个帖子中指出的那样:https://forums.adobe.com/thread/2131432,一些0xFF字节,表示后面的字节是元信息而不是实际数据,不会通过添加以下0x00字节来转义0xFF.
但是我试着编写操作图像数据的代码,以便添加丢失的0x00字节,但结果比预期的要复杂得多,我不想编写自己的JPEG解析器/加载器.
有些程序可以显示那些无效的JPEG图像,例如Microsoft Fotos或Paint.看起来他们容忍这些无效图像,将这些虚假标记视为内容数据.
有没有办法用java加载这些无效的图像,而不用自己处理单个字节?
我正在用 JUnit 5 编写一些 JUnit 测试。在每次测试之前,我需要加载一个测试资源并用它初始化一些其他东西。为此,我编写了带有 注释的 init 方法@BeforeEach,因为除了要加载的资源对于每个测试应该是不同的资源之外,进度总是相同的。
我首先想到的是去掉@BeforeEach注解,给init方法添加一个参数来指定应该加载哪个资源,然后在开始的每个测试中自己调用init方法。
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class MyTest {
private Object testResource;
private void init(String resourcePath) {
// actually load the resource and initialize some fields here
this.testResource = "Loaded resource from: " + resourcePath;
}
@Test
public void test0() {
init("TestResource0");
assertEquals("Loaded resource from: TestResource0", testResource);
}
@Test
public void test1() {
init("TestResource1");
assertEquals("Loaded resource from: TestResource1", testResource);
}
}
Run Code Online (Sandbox Code Playgroud)
这样我觉得我正在破坏 JUnit 测试流程的整个结构,我担心这可能会在未来扩展测试时导致一些问题,例如一些花哨的元测试编程,我将依赖 JUnit提供有关测试当前状态的正确信息。
所以我决定在 init 方法上保留要加载资源的参数并保留 …
我需要在 Rust 中编写一个循环,使其主体从一个值向下运行到并包括n = 0。一开始,我是这样写的:
for n in max..0 {
// ...
}
Run Code Online (Sandbox Code Playgroud)
然而,它只会运行到n = 1。
我能想到的最好的选择是:
let mut n = max;
loop {
// ...
if n == 0 {
break;
}
n -= 1;
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案确实很笨拙并且不能令我满意。是否有更好的方法来编写该循环,例如 for 循环,其范围包括 的右边界值..?
我想迭代整数的字节:
use core::mem::size_of;
const SIZE: usize = size_of::<u64>();
fn main() {
let x: u64 = 512;
let mut buf: [u8; SIZE] = [0; SIZE];
for (i, b) in x.to_be_bytes().into_iter().enumerate() {
buf[i] = b;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器告诉我该行buf[i] = b;he expected `u8`, found `&u8` . 但为什么?
当我查看IntoIterator拥有的数组类型的特征的实现时[T; N],该into_iter()方法返回std::array::IntoIter<T, N>实现Iterator特征 where 的a type Item = T。不应该T评价到u8这里吗?
为什么迭代器返回&u8引用而不是拥有的u8字节?
我无法将参数传递给 fn。
trait T {}
struct S {
others: Vec<Rc<RefCell<dyn T>>>
}
impl S {
fn bar(&self) {
for o in self.others {
foo(&o.borrow());
}
}
}
fn foo(t: &dyn T) {}
Run Code Online (Sandbox Code Playgroud)
编译器告诉我:
trait T {}
struct S {
others: Vec<Rc<RefCell<dyn T>>>
}
impl S {
fn bar(&self) {
for o in self.others {
foo(&o.borrow());
}
}
}
fn foo(t: &dyn T) {}
Run Code Online (Sandbox Code Playgroud)
我认为这就像在rust 书中的示例中,其中Rc自动取消引用并从我可以调用的 RefCell 中获取值borrow()。
我也尝试过显式取消引用,但似乎没有任何效果。
如何调用foo()中的每个dyn T对象 …