我读到了结构化单元测试,每个类都有一个测试类,每个方法都有一个内部类.想象一下,这似乎是一种组织测试的方便方法,所以我在Java项目中尝试过.但是,内部类中的测试似乎根本没有被接受.
我大致这样做了:
public class DogTests
{
public class BarkTests
{
@Test
public void quietBark_IsAtLeastAudible() { }
@Test
public void loudBark_ScaresAveragePerson() { }
}
public class EatTests
{
@Test
public void normalFood_IsEaten() { }
@Test
public void badFood_ThrowsFit() { }
}
}
Run Code Online (Sandbox Code Playgroud)
JUnit不支持这个,还是我做错了?
理论和参数化测试之间有什么区别?
在创建测试类时,我对实现差异不感兴趣,只是当你选择一个而不是另一个时.
我编写了一个单元测试,将文件写入文件系统,没有路径写入工作目录; 因此,如果从项目目录执行,则它在项目根目录中写入,如果在项目父目录中,则写入父目录根目录.
那么写入目标目录的正确方法是什么?很可能是目标目录中的目录?
如果我只是简单地指定target/
文件,它将写入父项目目标而不是项目目标.
更新:测试结束后我确实想要文件.该文件用于需要发送给第三方的第三方提取格式.可以打开/关闭测试以允许我仅在文件格式更改以便重新批准时才运行.这个文件不是一个大问题,但我想要一些容易找到的东西.
我想知道为什么assertEquals(double, double)
被弃用了.
我用过import static org.junit.Assert.assertEquals;
,我使用过JUnit 4.11.
以下是我的代码:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class AccountTest {
@Test
public void test() {
Account checking = new Account(Account.CHECKING);
checking.deposit(1000.0);
checking.withdraw(100.0);
assertEquals(900.0, checking.getBalance());
}
}
Run Code Online (Sandbox Code Playgroud)
checking.getBalance()
返回一个double值.
可能有什么不对?
我正在尝试运行我的junit测试(以验证属性文件是否正确加载)但我得到了ClassNotFoundException
虽然类在那里,所有必需的库也在那里.
这是我得到的错误:
Class not found ConfigurationManagerTest java.lang.ClassNotFoundException: ConfigurationManagerTest
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Run Code Online (Sandbox Code Playgroud)
有想法该怎么解决这个吗 ?
谢谢.
我有许多测试的基类,它们都有一些帮助方法.
它本身并没有对它进行任何测试,但JUnit(在eclipse中)正在调用它上面的测试运行器并抱怨没有方法可以测试.
怎么能让它忽略这个课?
我知道我可以添加一个dummyTest
可以解决问题的方法,但它也会出现在所有子类中.
建议?
嗨,我有一个Spring mvc控制器
@RequestMapping(value = "/jobsdetails/{userId}", method = RequestMethod.GET)
@ResponseBody
public List<Jobs> jobsDetails(@PathVariable Integer userId,HttpServletResponse response) throws IOException {
try {
Map<String, Object> queryParams=new LinkedHashMap<String, Object>();
queryParams.put("userId", userId);
jobs=jobsService.findByNamedQuery("findJobsByUserId", queryParams);
} catch(Exception e) {
logger.debug(e.getMessage());
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
}
return jobs;
}
Run Code Online (Sandbox Code Playgroud)
我想看看运行它时JSON字符串的样子.我写了这个测试用例
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("classpath:webapptest")
@ContextConfiguration(locations = {"classpath:test-applicationcontext.xml"})
public class FindJobsControllerTest {
private MockMvc springMvc;
@Autowired
WebApplicationContext wContext;
@Before
public void init() throws Exception {
springMvc = MockMvcBuilders.webAppContextSetup(wContext).build();
}
@Test
public void documentsPollingTest() throws Exception {
ResultActions resultActions = springMvc.perform(MockMvcRequestBuilders.get("/jobsdetails/2").accept(MediaType.APPLICATION_JSON));
System.out.println(/* Print the …
Run Code Online (Sandbox Code Playgroud) 我在Android Studio中运行单元测试.我有一个Java类,使用以下代码加载本机库
static
{
System.loadLibrary("mylibrary");
}
Run Code Online (Sandbox Code Playgroud)
但是当我在我的src/test
目录中测试这个类时,我得到了
java.lang.UnsatisfiedLinkError: no mylibrary in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
Run Code Online (Sandbox Code Playgroud)
如何才能找到原生.so库的路径,src/main/libs
以便进行单元测试而不出错?
注:里面src/main/libs
的目录我有3个子目录:armeabi
,mips
和x86
.其中每一个都包含正确的.so文件.我正在使用非实验版本来构建NDK库.
我不想使用其他第三方测试库,因为我所有其他"纯"java类都可以进行单元测试.但如果那是不可能的,那么我愿意接受替代方案.
这是我的测试代码,它会抛出错误
@Test
public void testNativeClass() throws Exception
{
MyNativeJavaClass test = new MyNativeJavaClass("lalalal")
List<String> results = test.getResultsFromNativeMethodAndPutThemInArrayList();
assertEquals("There should be only three result", 3, results.size());
}
Run Code Online (Sandbox Code Playgroud) 我是Java的新手,并且正在关注Eclipse Total Beginner的教程.它们都非常有用,但是在第12课中,他使用assertTrue
了一个测试用例和assertFalse
另一个测试用例.这是代码:
// Check the book out to p1 (Thomas)
// Check to see that the book was successfully checked out to p1 (Thomas)
assertTrue("Book did not check out correctly", ml.checkOut(b1, p1)); // If checkOut fails, display message
assertEquals("Thomas", b1.getPerson().getName());
assertFalse("Book was already checked out", ml.checkOut(b1,p2)); // If checkOut fails, display message
assertEquals("Book was already checked out", m1.checkOut(b1,p2));
Run Code Online (Sandbox Code Playgroud)
我搜索了这些方法的好文档,但没有找到任何东西.如果我的理解是正确的,assertTrue
那么assertFalse
当第二个参数求值为false时显示字符串.如果是这样的话,拥有它们的重点是什么?
编辑:我想我看到令我困惑的是什么.作者可能只是为了展示他们的功能而放置它们(毕竟它是一个教程).然后他设置了一个会失败的信息,这样就会打印出来并告诉我为什么失败了.开始变得更有意义......我认为这是解释,但我不确定.
我有一个接口,List
其实现包括单链接列表,双重,循环等.我为Singly编写的单元测试应该对大多数双重以及循环和接口的任何其他新实现都有好处.因此,JUnit不是为每个实现重复单元测试,而是提供内置的东西,让我有一个JUnit测试并针对不同的实现运行它?
使用JUnit参数化测试我可以提供不同的实现,如Singly,doublely,circular等,但是对于每个实现,相同的对象用于执行类中的所有测试.
junit4 ×10
java ×9
junit ×4
unit-testing ×2
android ×1
assert ×1
assertions ×1
eclipse ×1
json ×1
junit-runner ×1
maven ×1
spring-mvc ×1
testcase ×1