小编Dav*_*vid的帖子

JUnit 5不执行使用BeforeEach注释的方法

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)

java maven junit5

17
推荐指数
5
解决办法
6983
查看次数

无法使用Samsung手机创建的java加载JPEG

我在使用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加载这些无效的图像,而不用自己处理单个字节?

java jpeg javafx

14
推荐指数
1
解决办法
890
查看次数

如何在每个 @Test 中为 @BeforeEach 方法提供参数

我正在用 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 方法上保留要加载资源的参数并保留 …

java junit junit5

8
推荐指数
1
解决办法
6102
查看次数

如何在 Rust 中编写一个包含 0 的递减范围的循环?

我需要在 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 循环,其范围包括 的右边界值..

loops for-loop rust

7
推荐指数
0
解决办法
6333
查看次数

为什么 IntoIter 不拥有这些值?

我想迭代整数的字节:

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字节?

types ownership rust

7
推荐指数
1
解决办法
354
查看次数

如何将 Rc&lt;RefCell&lt;dyn T&gt;&gt; 传递给需要 &amp;dyn T 的 fn?

我无法将参数传递给 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对象 …

dereference rust trait-objects interior-mutability

2
推荐指数
1
解决办法
290
查看次数