首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerMock AssertionError

PowerMock AssertionError
EN

Stack Overflow用户
提问于 2015-11-25 12:30:32
回答 1查看 1.7K关注 0票数 2

我对下面的测试有问题。FileUtil类是我想要测试的类。

代码语言:javascript
复制
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.FilenameUtils;
import static org.easymock.EasyMock.expect;
import static org.powermock.api.easymock.PowerMock.mockStatic;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.junit.Assert.assertEquals;



@RunWith(PowerMockRunner.class)
@PrepareForTest({FileUtil.class, FilenameUtils.class})
  public class TestBeanTest {


  private Map<String, String> fileUrls = new HashMap<>();
  private final String contentType = "image/jpeg";
  private final String defaultName = "default";


  @Before
  public void setUp() {

  }

  @After
  public void tearDown() {

    fileUrls.clear();
  }

  @Test
  public void testSanitizeFilename(){

    fileUrls.put("", "");
    fileUrls.put(" ", " ");
    fileUrls.put("jpg", "jpg.jpeg");


    mockStatic(FilenameUtils.class);

    for(Map.Entry<String, String> entry : fileUrls.entrySet()){
        expect(FilenameUtils.getExtension(entry.getKey())).andReturn(entry.getValue().substring(entry.getValue().lastIndexOf(". ") + 2)).anyTimes();
        expect(FilenameUtils.getBaseName(entry.getKey())).andReturn(entry.getValue().substring(entry.getValue().lastIndexOf(".") + 1)).anyTimes();

        PowerMock.replay();
        String result = FileUtil.sanitizeFilename(entry.getKey(), defaultName, contentType);
        assertEquals(result, entry.getValue());
        PowerMock.verify();
    }

  }


  @Test(expected = MalformedURLException.class)
  public void testSanitizeProcessedFilename() throws MalformedURLException{
    fileUrls.put("http://www.test.com", "image.jpeg");
    fileUrls.put("http://www.test.com/", "image.jpeg");


    mockStatic(FilenameUtils.class);

    for(Map.Entry<String, String> entry : fileUrls.entrySet()){
        String fileName = processUrl(entry.key());//throws MalformedURLException

        expect(FilenameUtils.getExtension(entry.getKey())).andReturn(entry.getValue().substring(entry.getValue().lastIndexOf(". ") + 2)).anyTimes();
        expect(FilenameUtils.getBaseName(entry.getKey())).andReturn(entry.getValue().substring(entry.getValue().lastIndexOf(".") + 1)).anyTimes();

        PowerMock.replay();

        String result = FileUtil.sanitizeFilename(fileName, defaultName, contentType);
        assertEquals(result, entry.getValue());
        PowerMock.verify();
    }

  }

  private String processUrl(String url){
    URL url = new URL(entry.getKey());
    String path = url.getPath();
    String fileName;
    int lastIndexOfSlash = path.lastIndexOf("/");
    if (lastIndexOfSlash >= 0) {
            fileName = path.substring(lastIndexOfSlash + 1);
    } else {
            fileName = "";
    }
  }
}

成功地执行了第一个测试方法(TestSanitizeFilename),但是第二个测试方法(testSanitizeProcessedFilename)抛出了以下错误:

代码语言:javascript
复制
Expected exception: java.net.MalformedURLException
    java.lang.AssertionError
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:312)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:88)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:96)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:118)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:104)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:53)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)

我不知道我做错了什么。我尝试了PowerMock.verifyAll()和PowerMock.replayAll(),但是仍然有错误。也许我把代码循环起来是不对的?但我想不出另一种方法来实现这一点。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-25 13:53:32

对测试方法进行注释。

代码语言:javascript
复制
@Test(expected = MalformedURLException.class)

这意味着它期望测试抛出这个异常。正如您在评论中所说的,此异常不会抛出,因此:

代码语言:javascript
复制
Expected exception: java.net.MalformedURLException
    java.lang.AssertionError

要修复它,如果您不希望您的测试抛出异常,只需从测试注释中删除(expected = MalformedURLException.class)即可

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33916609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档