JUnit тестирование для этого конкретного метода - PullRequest
3 голосов
/ 14 февраля 2011

Я пытаюсь написать несколько тестов JUnit для метода Java, который берет базовый URL и целевой URL и возвращает целевой URL относительно указанного базового URL.

Я использую раздел на основе категорийсделать мой тестовый набор.В настоящее время я тестирую, чтобы проверить следующее:

  • проверить, что два входных URL имеют одинаковый протокол и хост;
  • проверить, когда пути не совпадают, и что относительный URL корректируется правильно;
  • проверить, когда базовый URL длиннее целевого;
  • проверить, когда целевой URL длиннее базового URL;
  • проверить, совпадают ли базовый URL и целевой URL;

Мне было интересно, как другие люди будут тестировать этот метод с помощью JUnit?Я пропускаю какие-либо критерии?

 /**
 * This method converts an absolute url to an url relative to a given base-url.
 * The algorithm is somewhat chaotic, but it works (Maybe rewrite it). 
 * Be careful, the method is ".mm"-specific. Something like this should be included
 * in the librarys, but I couldn't find it. You can create a new absolute url with
 * "new URL(URL context, URL relative)".
 */
public static String toRelativeURL(URL base, URL target) {
        // Precondition: If URL is a path to folder, then it must end with '/' character. 
    if( (base.getProtocol().equals(target.getProtocol())) &&
        (base.getHost().equals(target.getHost()))) {

        String baseString = base.getFile();
        String targetString = target.getFile();
        String result = "";

        //remove filename from URL
        baseString = baseString.substring(0, baseString.lastIndexOf("/")+1);

        //remove filename from URL
        targetString = targetString.substring(0, targetString.lastIndexOf("/")+1);

        StringTokenizer baseTokens = new StringTokenizer(baseString,"/");//Maybe this causes problems under windows
        StringTokenizer targetTokens = new StringTokenizer(targetString,"/");//Maybe this causes problems under windows
        String nextBaseToken = "", nextTargetToken = "";

        //Algorithm

        while(baseTokens.hasMoreTokens() && targetTokens.hasMoreTokens()) {
        nextBaseToken = baseTokens.nextToken();
        nextTargetToken = targetTokens.nextToken();
        System.out.println("while1");
        if (!(nextBaseToken.equals(nextTargetToken))) {
            System.out.println("if1");
            while(true) {
            result = result.concat("../");
            System.out.println(result);
            if (!baseTokens.hasMoreTokens()) {
                System.out.println("break1");
                break;
            }
            System.out.println("break2");
            nextBaseToken = baseTokens.nextToken();
            }
            while(true) {
            result = result.concat(nextTargetToken+"/");
            System.out.println(result);
            if (!targetTokens.hasMoreTokens()) {
                System.out.println("break3");
                break;
            }
            System.out.println("break4");
            nextTargetToken = targetTokens.nextToken();
            }
            String temp = target.getFile();
            result = result.concat(temp.substring(temp.lastIndexOf("/")+1,temp.length()));
            System.out.println("1");
            return result;
        }
        }

        while(baseTokens.hasMoreTokens()) {
        result = result.concat("../");
        baseTokens.nextToken();
        }

        while(targetTokens.hasMoreTokens()) {
        nextTargetToken = targetTokens.nextToken();
        result = result.concat(nextTargetToken + "/");
        }

        String temp = target.getFile();
        result = result.concat(temp.substring(temp.lastIndexOf("/")+1,temp.length()));
        System.out.println("2");
        return result;
    }
    System.out.println("3");
    return target.toString();
    }
}

1 Ответ

1 голос
/ 14 февраля 2011

Всего несколько мыслей ...

  1. Возможно, вы захотите проверить, является ли ваш (или оба) ваш URL-адрес пустым. :)
  2. Если целевой URL имеет параметры (например: http://host/app/bla?param1=value&param2=value), содержит ли сгенерированный относительный URL параметры?
  3. Если целевой URL равен http://host, это вызовет IndexOutOfBoundException для targetString.lastIndexOf("/") ... то же самое относится к базовому URL.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...