Я думаю, что вы должны предоставить свое собственное определение того, что является символом слова, вместо того, чтобы полагаться на границы слов по умолчанию ICE ([[:<:]]
, [[:>:]]
). Из документации mysql 5.6 :
Слово - это последовательность символов слова, которой не предшествуют или не следуют символы слова. Символ слова - это буквенно-цифровой символ в классе alnum или знак подчеркивания (
blockquote>_
).Это будет означать:
'^|[^[:alnum:]_]'
^ -- the beginning of the string | -- OR [^ -- any character OTHER than [:alnum:] -- an alphanumeric character _ -- an underscore ]
И конец строки ICE будет:
'[^[:alnum:]_]|, где
$
представляет конец строки.Вы можете просто изменить это, чтобы добавить одинарную кавычку в класс символов, например:
- начало:
'^|[^[:alnum:]_'']'
- конец:
[1147 ]'[^[:alnum:]_'']|
Вот ваше регулярное выражение:
SELECT (val REGEXP CONCAT('(^|[^[:alnum:]_''])', 'cat''s', '([^[:alnum:]_'']|$)'));
Схема (MySQL v5.6) [1133 ]
Запрос № 1
Select ('cat''s' REGEXP CONCAT('(^|[^[:alnum:]_''])', 'cat''s', '([^[:alnum:]_'']|$)')) res;
| res | | --- | | 1 |Запрос № 2
Select ('''cat''s' REGEXP CONCAT('(^|[^[:alnum:]_''])', '''cat''s', '([^[:alnum:]_'']|$)' )) res;
| res | | --- | | 1 |Запрос № 3
Select ('_cat''s' REGEXP CONCAT('(^|[^[:alnum:]_''])', '_cat''s' , '([^[:alnum:]_'']|$)' )) res;
| res | | --- | | 1 |Запрос № 4
Select ('-cat''s' REGEXP CONCAT('(^|[^[:alnum:]_''])', '-cat''s' , '([^[:alnum:]_'']|$)' )) res;
| res | | --- | | 1 |Запрос № 5
Select (' cat''s' REGEXP CONCAT('(^|[^[:alnum:]_''])', ' cat''s' , '([^[:alnum:]_'']|$)' )) res;
| res | | --- | | 1 |Запрос № 6
Select ('cat''' REGEXP CONCAT('(^|[^[:alnum:]_''])', 'cat''' , '([^[:alnum:]_'']|$)' )) res;
| res | | --- | | 1 |[1147 ]Вот ваше регулярное выражение:
[111]Схема (MySQL v5.6) [1133 ]
Запрос № 1
[112] [113]Запрос № 2
[114] [115]Запрос № 3
[116] [117]Запрос № 4
[118] [119]Запрос № 5
[1110] [1111]Запрос № 6
[1112] [1113] , где$
представляет конец строки.Вы можете просто изменить это, чтобы добавить одинарную кавычку в класс символов, например:
- начало:
'^|[^[:alnum:]_'']'
- конец:
[1147 ]'[^[:alnum:]_'']|
Вот ваше регулярное выражение:
[111]Схема (MySQL v5.6) [1133 ]
Запрос № 1
[112] [113]Запрос № 2
[114] [115]Запрос № 3
[116] [117]Запрос № 4
[118] [119]Запрос № 5
[1110] [1111]Запрос № 6
[1112] [1113] [1147 ]Вот ваше регулярное выражение:
[111]Схема (MySQL v5.6) [1133 ]
Запрос № 1
[112] [113]Запрос № 2
[114] [115]Запрос № 3
[116] [117]Запрос № 4
[118] [119]Запрос № 5
[1110] [1111]Запрос № 6
[1112] [1113]
Я не мог найти четкий ответ в документах JUnit о Вашем вопросе, но намерение, как anjanb записал, то, что каждый тест независим от других, таким образом, новый экземпляр TestCase мог быть создан, чтобы каждый тест был запущен.
Если у Вас есть дорогая тестовая установка ("приспособления"), что Вы хотите быть совместно использованными через все тестовые сценарии в тестовом классе, можно использовать @BeforeClass аннотацию на статический метод достигнуть этого результата: http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html. Отметьте однако, что новый экземпляр может все еще быть создан для каждого теста, но это не будет влиять на статические данные, которые инициализировал Ваш @BeforeTest метод.
Да, создается отдельный экземпляр.
При запущении того теста 2 экземпляра MyTest создаются.
Если Вы хотите другое поведение, одна опция состоит в том, чтобы использовать подобный инструмент под названием TestNG (http://testng.org/doc/).
Существует один экземпляр для каждого тестового прогона. Попробовать
public class MyTest extends TestCase {
public MyTest() { System.out.println("MyTest Constructor");
public void setUp() { System.out.println("MyTest setUp");
public void tearDown() { System.out.println("MyTest tearDown");
public void testSomething() { System.out.println("MyTest testSomething");
public void testSomethingElse() { System.out.println("MyTest testSomethingElse");
}
Исходный код (включая который к более новым версиям - Ваш и мой пример Junit 3) находится на http://www.junit.org
Если Вы спрашиваете это, потому что Вы обеспокоены инициализируемыми данными и повторно инициализированы в Вашем конструкторе, знают, что предписанный способ инициализировать Ваши данные тестовых сценариев через установку () и разрушение () исключительно.
Да, определенно. Я обнаружил, что данные, которые я хранил в переменных экземпляра, не могут быть доступны между тестами из-за такой конструкции.