Во-первых, создайте функцию (использующий CTE, общее выражение таблицы покончило с потребностью во временной таблице)
create function dbo.SplitString
(
@str nvarchar(4000),
@separator char(1)
)
returns table
AS
return (
with tokens(p, a, b) AS (
select
1,
1,
charindex(@separator, @str)
union all
select
p + 1,
b + 1,
charindex(@separator, @str, b + 1)
from tokens
where b > 0
)
select
p-1 zeroBasedOccurance,
substring(
@str,
a,
case when b > 0 then b-a ELSE 4000 end)
AS s
from tokens
)
GO
Затем используйте его в качестве любой таблицы (или измените, это для установки в существующем сохранило proc) как это.
select s
from dbo.SplitString('Hello John Smith', ' ')
where zeroBasedOccurance=1
Обновление
Предыдущая версия перестала бы работать для входной строки дольше, чем 4 000 символов. Эта версия заботится об ограничении:
create function dbo.SplitString
(
@str nvarchar(max),
@separator char(1)
)
returns table
AS
return (
with tokens(p, a, b) AS (
select
cast(1 as bigint),
cast(1 as bigint),
charindex(@separator, @str)
union all
select
p + 1,
b + 1,
charindex(@separator, @str, b + 1)
from tokens
where b > 0
)
select
p-1 ItemIndex,
substring(
@str,
a,
case when b > 0 then b-a ELSE LEN(@str) end)
AS s
from tokens
);
GO
Использование остается тем же.
В последние годы произошел переход от коротких сокращенных названий тестов к более длинным, похожим на предложения названиям тестов. Частично это связано с популярностью RSpec и концепцией, согласно которой тесты являются спецификациями и должны быть описательными.
Если вы предпочитаете описательные имена тестов, я настоятельно рекомендую использовать метод test
. Я считаю его более читабельным.
test "should not be able to login with invalid password" do
#...
end
def_should_not_be_able_to_login_with_invalid_password
#...
end
Кроме того, поскольку описание представляет собой строку, оно может содержать любые символы. С def
вы ограничены в том, какие символы вы можете использовать.
Я считаю, что первый метод был реализован, начиная с Rails 2.2. Насколько мне известно, это просто улучшает читаемость вашего кода (так как def может быть любой функцией, а test используется только в тестовых примерах). Удачи!
Как предлагает Майк Трпчич, вам следует проверить RSpec и Cucumber. Я хотел бы добавить, что вам также следует взглянуть на:
Shoulda - это макро-фреймворк для написания кратких модульных тестов для ваших моделей / контроллеров, а второй является заменой приспособлений.
Я бы посоветовал провести ваше тестирование с помощью RSpec или Cucumber . Я использую оба для тестирования всех своих приложений. RSpec используется для тестирования моделей и контроллеров, а Cucumber тестирует представления (с помощью включенной функции Webrat ).