Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Я в значительной степени с Вами на этом человеке. Соглашения о присвоении имен, которые Вы использовали:
, В чем больше Вы нуждаетесь с тестового имени?
Вопреки ответ Ray я не думаю Тест , префикс необходим. Это - тестовый код, мы знаем это. Если необходимо сделать это для идентификации кода, то у Вас есть большие проблемы, , Ваш тестовый код не должен путаться с Вашим производственным кодом.
Что касается длины и использования подчеркивания, тестовый код , о ком заботится ад? Только Вы и Ваша команда будете видеть его, пока это читаемо, и ясно о том, что делает тест, продолжите!:)
Однако я все еще довольно плохо знаком с тестированием и блоггинг моих приключений с ним :)
Первый набор имен более читаем мне, так как CamelCasing разделяет слова и underbars отдельные части схемы именования.
я также склонен включать "Тест" где-нибудь, или на имя функции или на пространство имен включения или класс.
Пока Вы применяете единственную практику, она действительно не имеет значения. Обычно я пишу тест единого блока для метода, который касается всех изменений для метода (у меня есть простые методы;) и затем пишут более сложные наборы тестов для методов, которые требуют его. Моя структура именования является таким образом обычно тестом (пережиток от JUnit 3).
Я называю свои методы тестирования, как и другие методы, с использованием «PascalCasing» без каких-либо подчеркиваний или разделителей. Я оставляю постфикс Test для метода, потому что он не добавляет значения. То, что метод является тестовым, указывается атрибутом TestMethod .
[TestMethod]
public void CanCountAllItems() {
// Test the total count of items in collection.
}
Из-за того, что каждый тестовый класс должен тестировать только один другой класс, я оставляю имя класса вне имени метода. Имя класса, который содержит тестовые методы, называется так же, как тестируемый класс, с добавлением постфикса «Тесты».
[TestClass]
public class SuperCollectionTests(){
// Any test methods that test the class SuperCollection
}
Для методов, которые проверяют исключения или действия, которые невозможны, я ставлю перед методом теста префикс ] Невозможно .
[TestMethod]
[ExpectedException(typeOf(ArgumentException))]
public void CannotAddSameObjectAgain() {
// Cannot add the same object again to the collection.
}
Мои соображения по именованию основаны на статье «Советы TDD: правила и рекомендации по именованию тестов» Брайана Кука.