elm-test의 테스트 코드 개선에 도전해 보겠습니다.
보이는
모듈을 만들면 애플리케이션에서 실행하는 것은 억지이므로 자산 남은 뒤에 테스트 코드를 실행하고 있습니다만,
elm-test 의 테스트 코드의 가독성을 좀 더 올릴 수 없을까, 조금 궁리해 보았습니다.
개선은 절대적으로 좋아진 것처럼 보이지만, 어디까지나 개인적인 취향입니다.
아래가 elm-test init
그러면 자동적으로 들어오는 샘플 코드의 발췌로, 이것을 초기 상태로 합니다.
이 중에는 2개의 테스트 케이스가 들어 있고,
둘 다 공 기대 값과 함수 결과의 두 값의 동일성을보고 있습니다.
Tests.elm (원래 코드)all : Test
all =
describe "Unit test examples"
[ test "Addition" <|
\() ->
Expect.equal (3 + 7) 10
, test "String.left" <|
\() ->
Expect.equal "a" (String.left 1 "abcdefg")
]
자신에게 있어서는 아래와 같은 요소 근처가 약간 작법적이고, 가독성을 낮추거나 매회 기술해야 하는 번거로움을 느끼게 할까라고 생각합니다.
all : Test
all =
describe "Unit test examples"
[ test "Addition" <|
\() ->
Expect.equal (3 + 7) 10
, test "String.left" <|
\() ->
Expect.equal "a" (String.left 1 "abcdefg")
]
<|
\() ->
의 함수 설명 변경 1: 큰 틀 변경
단계적으로 변경해 나가려고 합니다.
우선, test 함수의 형태 주석이 다음과 같이 되어 있습니다.
test : String -> (() -> Expectation) -> Test
문자열과 함수의 두 값을 받고 Test 유형을 반환하기 때문에,
test 함수의 앨리어스(alias)가 되는 중치 함수를 정의해 주면(자) <|
(을)를 생략 할 수 있을 것 같습니다."テスト内容" => コード
라는 느낌이 되도록 해 봅니다.
TestExp.elmmodule TestExp exposing (..)
import Test exposing (Test)
import Expect exposing (Expectation)
(=>) : String -> (() -> Expectation) -> Test
(=>) = Test.test
이 =>関数
를 테스트 코드에 적용해보십시오.
Tests.elm(v1)import TestExp exposing (..)
all : Test
all =
describe "Unit test examples"
[ "Addition" =>
\() ->
Expect.equal (3 + 7) 10
, "String.left" =>
\() ->
Expect.equal "a" (String.left 1 "abcdefg")
]
test関数
와 <|
가 없어져, 조금 깨끗이 한 것처럼 느낍니다.
변경 2 : 빈 인수를 취하는 함수 변경
다음에 \() ->
를 어떻게든 할 수 없을까-와. 1행 전유하고 있고. .
다시 한번, test 함수의 형태 주석을 보면, 2 번째의 인수는 ()
test : String -> (() -> Expectation) -> Test
()
를 인수에 취해, 호출할 때에는 생략하는 함수의 정의 패턴은 다음과 같은 것이 생각됩니다.
f : () -> Int
f _ = 100
f : () -> Int
f = \() -> 10
그럼, Expect.equal
함수에 \() ->
기술을 흡수해 줄까라고 생각합니다.
그래서 eq
함수를 만들어 보았습니다.
TestExp.elm (추기)eq : a -> a -> () -> Expectation
eq a b _ = Expect.equal a b
이 eq関数
를 테스트 코드에 적용해보십시오.
Tests.elm(v2)all : Test
all =
describe "Unit test examples"
[ "Addition"
=> eq (3 + 7) 10
, "String.left"
=> eq "a" (String.left 1 "abcdefg")
]
당초의 과제가 모두 클리어되었습니다.
이것으로 개인적으로 느끼고 있던 작법감이 없어졌습니다!
변경 3: 가독성 더 올라가거나 도전
v2의 코드로 부족감은 없습니다만,
동일성을 조사한다는 것을 좀 더 이해하기 쉽지 않을까?
마지막으로 eq関数
를 중간 함수로 변경하고 싶습니다.=>
의 우변에 괄호를 붙일 필요가 없도록 연산 우선도도 조정합니다.
TestExp.elm (변경)(===) : a -> a -> () -> Expectation
(===) a b _ = Expect.equal a b
infixl 8 =>
이것을 테스트 코드에 적용해 보겠습니다.
Tests.elm(v3)all : Test
all =
describe "Unit test examples"
[ "Addition"
=> (3 + 7) === 10
, "String.left"
=> "a" === (String.left 1 "abcdefg")
]
동일성을 확인하고 있다는 것을 좀 더 말하고 있는 코드가 된 것은 아닐까 생각합니다.
v2와 v3는 어느 쪽이 좋은가는 취향의 문제일까라고.
중치 함수 만드는 수법은 JS에서는 할 수 없었던 방식이므로 Elm 귀엽다고 하는 생각이 한층 더 늘어나는 포인트일까라고 생각합니다.
남용하면 오레올레 기호 투성이의 코드가 된다고 생각하므로, 요소만의 사용이 좋지 않을까.
자신은 굳이 회사의 멤버에게 이번 테스트 코드의 수법을 공유해, 멤버에게 훙훅해 준 v3를 채용했습니다.
Reference
이 문제에 관하여(elm-test의 테스트 코드 개선에 도전해 보겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hosomichi/items/f4f45535deca7ebebe65
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
test : String -> (() -> Expectation) -> Test
module TestExp exposing (..)
import Test exposing (Test)
import Expect exposing (Expectation)
(=>) : String -> (() -> Expectation) -> Test
(=>) = Test.test
import TestExp exposing (..)
all : Test
all =
describe "Unit test examples"
[ "Addition" =>
\() ->
Expect.equal (3 + 7) 10
, "String.left" =>
\() ->
Expect.equal "a" (String.left 1 "abcdefg")
]
다음에
\() ->
를 어떻게든 할 수 없을까-와. 1행 전유하고 있고. .다시 한번, test 함수의 형태 주석을 보면, 2 번째의 인수는
()
test : String -> (() -> Expectation) -> Test
()
를 인수에 취해, 호출할 때에는 생략하는 함수의 정의 패턴은 다음과 같은 것이 생각됩니다.f : () -> Int
f _ = 100
f : () -> Int
f = \() -> 10
그럼,
Expect.equal
함수에 \() ->
기술을 흡수해 줄까라고 생각합니다.그래서
eq
함수를 만들어 보았습니다.TestExp.elm (추기)
eq : a -> a -> () -> Expectation
eq a b _ = Expect.equal a b
이
eq関数
를 테스트 코드에 적용해보십시오.Tests.elm(v2)
all : Test
all =
describe "Unit test examples"
[ "Addition"
=> eq (3 + 7) 10
, "String.left"
=> eq "a" (String.left 1 "abcdefg")
]
당초의 과제가 모두 클리어되었습니다.
이것으로 개인적으로 느끼고 있던 작법감이 없어졌습니다!
변경 3: 가독성 더 올라가거나 도전
v2의 코드로 부족감은 없습니다만,
동일성을 조사한다는 것을 좀 더 이해하기 쉽지 않을까?
마지막으로 eq関数
를 중간 함수로 변경하고 싶습니다.=>
의 우변에 괄호를 붙일 필요가 없도록 연산 우선도도 조정합니다.
TestExp.elm (변경)(===) : a -> a -> () -> Expectation
(===) a b _ = Expect.equal a b
infixl 8 =>
이것을 테스트 코드에 적용해 보겠습니다.
Tests.elm(v3)all : Test
all =
describe "Unit test examples"
[ "Addition"
=> (3 + 7) === 10
, "String.left"
=> "a" === (String.left 1 "abcdefg")
]
동일성을 확인하고 있다는 것을 좀 더 말하고 있는 코드가 된 것은 아닐까 생각합니다.
v2와 v3는 어느 쪽이 좋은가는 취향의 문제일까라고.
중치 함수 만드는 수법은 JS에서는 할 수 없었던 방식이므로 Elm 귀엽다고 하는 생각이 한층 더 늘어나는 포인트일까라고 생각합니다.
남용하면 오레올레 기호 투성이의 코드가 된다고 생각하므로, 요소만의 사용이 좋지 않을까.
자신은 굳이 회사의 멤버에게 이번 테스트 코드의 수법을 공유해, 멤버에게 훙훅해 준 v3를 채용했습니다.
Reference
이 문제에 관하여(elm-test의 테스트 코드 개선에 도전해 보겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hosomichi/items/f4f45535deca7ebebe65
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(===) : a -> a -> () -> Expectation
(===) a b _ = Expect.equal a b
infixl 8 =>
all : Test
all =
describe "Unit test examples"
[ "Addition"
=> (3 + 7) === 10
, "String.left"
=> "a" === (String.left 1 "abcdefg")
]
Reference
이 문제에 관하여(elm-test의 테스트 코드 개선에 도전해 보겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hosomichi/items/f4f45535deca7ebebe65텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)