2015-12-02 3 views
0

При создании SDK лучше всего не менять сигнатуры методов, чтобы вы не разбивали клиентов (включая имя и параметры). Как я могу написать модульные тесты или модульные тесты, чтобы убедиться, что люди не меняют подписи метода моего Java SDK, когда они способствуют этому?Написание теста для предотвращения изменений подписи метода

+1

Написать тест, как клиент, который нарушил бы такие изменения? – Mephy

ответ

3

Используя отражение java, вы можете проверить методы класса. Затем вы можете искать метод определенной подписи и не выполнять утверждение, если этот метод не найден в классе.

Например, чтобы проверить наличие следующего метода:

public class SO { 

    public Integer foo(String bar) { 
     System.out.println("foo"); 
     return 0; 
    } 
} 

Вы можете использовать следующий тест:

public class SOTest { 

    @Test 
    public void testFooMethodExists() { 
     try { 
      Class<SO> clazz = SO.class; 
      Method method = clazz.getMethod("foo", String.class); 
      Class<?> returnClass = method.getReturnType(); 
      Assert.assertTrue("foo method returns the wrong type.", 
       returnClass.equals(Integer.class)); 
     } catch (NoSuchMethodException | SecurityException e) { 
      Assert.fail("foo method is missing."); 
     } 
    } 

} 

Это очень простой пример, но может быть легко расширена до искать более сложные сигнатуры методов.

Смежные вопросы