有没有更好的方法断言方法在JUnit 5中抛出异常?
目前,我必须使用@Rule来验证我的测试是否会引发异常,但这对于我希望多个方法在我的测试中抛出异常的情况不起作用.
我是框架的新手(刚刚通过了这个类),这是我第一次使用springboot.
我正在尝试运行一个简单的Junit测试来查看我的CrudRepositories是否确实正常工作.
我一直得到的错误是:
无法找到@SpringBootConfiguration,您需要在测试java.lang.IllegalStateException中使用@ContextConfiguration或@SpringBootTest(classes = ...)
不弹簧启动配置自己?
我的测试班
@RunWith(SpringRunner.class)
@DataJpaTest
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class JpaTest {
@Autowired
private AccountRepository repository;
@After
public void clearDb(){
repository.deleteAll();
}
@Test
public void createAccount(){
long id = 12;
Account u = new Account(id,"Tim Viz");
repository.save(u);
assertEquals(repository.findOne(id),u);
}
@Test
public void findAccountByUsername(){
long id = 12;
String username = "Tim Viz";
Account u = new Account(id,username);
repository.save(u);
assertEquals(repository.findByUsername(username),u);
}
Run Code Online (Sandbox Code Playgroud)
我的Spring启动应用启动器
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"domain.repositories"})
@ComponentScan(basePackages = {"controllers","domain"})
@EnableWebMvc
@PropertySources(value {@PropertySource("classpath:application.properties")})
@EntityScan(basePackages={"domain"})
public class Application …Run Code Online (Sandbox Code Playgroud) 建议使用ArgumentCaptor进行验证,但不使用stubbing.
但我不明白ArgumentCaptor如何用于存根.有人可以解释上面的陈述,并说明ArgumentCaptor如何用于存根或提供一个链接,说明如何做到这一点?
使用JUnit进行单元测试时,有两种类似的方法,setUp()和setUpBeforeClass().这些方法有什么区别?另外,tearDown()和之间有什么区别tearDownAfterClass()?
以下是签名:
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
Run Code Online (Sandbox Code Playgroud) 当我查看Assert类JavaDoc中的示例时
assertThat("Help! Integers don't work", 0, is(1)); // fails:
// failure message:
// Help! Integers don't work
// expected: is <1>
// got value: <0>
assertThat("Zero is one", 0, is(not(1))) // passes
Run Code Online (Sandbox Code Playgroud)
比方说,我没有看到一个很大的优势assertEquals( 0, 1 ).
如果构造变得更复杂但是你看到更多的优点,那么对于消息可能很好吗?可读性?
我发现JUnit的正确使用(或至少是文档)非常令人困惑.这个问题既可作为未来参考,也可作为真正的问题.
如果我理解正确,有两种主要的方法来创建和运行JUnit测试:
方法A(JUnit 3-style):创建一个扩展TestCase的类,并用该单词启动测试方法test.当作为JUnit Test(在Eclipse中)运行该类时,test将自动运行以该单词开头的所有方法.
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Run Code Online (Sandbox Code Playgroud)
方法B(JUnit 4-style):创建一个"普通"类并@Test在方法前加一个注释.请注意,您不必使用单词启动方法test.
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Run Code Online (Sandbox Code Playgroud)
混合两者似乎不是一个好主意,请参阅例如 …
由于该方法Assert.assertEquals已弃用,我们现在应该使用哪种方法?
以下代码:
String arg1 = "test";
String arg2 = "me";
Assert.assertEquals(arg1, arg2);
Run Code Online (Sandbox Code Playgroud)
给出以下警告:
此行有多个标记
- 不推荐使用Assert类型的方法assertEquals(String,String)
- Assert类型已弃用
如何在JUnit测试用例中对列表进行断言?不仅列表的大小,而且列表的内容.
是否有一种简洁的内置方法在JUnit中对两个类似类型的数组进行等于断言?默认情况下(至少在JUnit 4中)它似乎在数组对象本身上进行实例比较.
EG,不起作用:
int[] expectedResult = new int[] { 116800, 116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);
Run Code Online (Sandbox Code Playgroud)
当然,我可以手动完成:
assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
assertEquals("mismatch at " + i, expectedResult[i], result[i]);
Run Code Online (Sandbox Code Playgroud)
..但有更好的方法吗?
我想知道是否有人知道如何使用assertThat()和检查列表是否为空Matchers?
我只能使用JUnit的最佳方式:
assertFalse(list.isEmpty());
Run Code Online (Sandbox Code Playgroud)
但我希望在Hamcrest有一些方法可以做到这一点.
java ×10
junit ×10
collections ×2
hamcrest ×2
unit-testing ×2
arrays ×1
assertions ×1
junit4 ×1
junit5 ×1
mockito ×1
spring ×1
spring-boot ×1
spring-data ×1
testing ×1