euphony에서 TDD 방식으로 개발해보기 #43
designe
started this conversation in
Knowledge Share
Replies: 1 comment 1 reply
-
Example TEST_P(ASCIICharsetTestFixture, DecodingTest)
{
openCharset();
std::string source;
std::string expectedResult;
std::tie(expectedResult, source) = GetParam();
HexVector hv = HexVector(source);
std::string actualResult = charset->decode(hv);
EXPECT_EQ(actualResult, expectedResult);
}
INSTANTIATE_TEST_CASE_P(
ChrasetDecodingTestSuite,
ASCIICharsetTestFixture,
::testing::Values(
TestParamType("a", "61"),
TestParamType("b", "62"),
TestParamType("c", "63"),
TestParamType("abc", "616263"),
TestParamType("lmno", "6c6d6e6f"),
TestParamType("efg", "656667"),
TestParamType("abcdefghijklmnopqrstuvwxyz", "6162636465666768696a6b6c6d6e6f707172737475767778797a"),
TestParamType("ABC", "414243"),
TestParamType("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "4142434445464748494a4b4c4d4e4f505152535455565758595a")
)); https://github.com/euphony-io/euphony/blob/master/euphony/src/main/cpp/tests/asciiCharsetTest.cpp 위는 ASCII 문자열을 어떻게 encoding 하는지 테스트하는 코드입니다. namespace Euphony {
class ASCIICharset : public Charset {
public:
ASCIICharset() = default;
~ASCIICharset() = default;
HexVector encode(std::string src);
std::string decode(const HexVector &src);
};
} https://github.com/euphony-io/euphony/blob/master/euphony/src/main/cpp/core/ASCIICharset.h#L8 그럼 Euphony에서는 Charset 인터페이스를 따르기만 하면 알아서 작동하게 됩니다. |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
여기는 지식공유 토론방입니다.
영어 번역 기능도 제공되는 것 같아서 한글로 작성해서 각종 팁들을 올려보면 좋을 것 같습니다 :)
라이브러리는 TDD 개발론을 적용하기에 매우 좋은 연습장이라고 볼 수 있습니다.
개발할때 유닛테스트를 우선 만들면 내가 어떤걸 만족하는 프로그램을 만들지 생각해볼 수 있거든요.
아래와 같이 개발해보면 편리할 것 같아요.
euphony는 총 3개의 유닛테스트 도구를 활용합니다.
native(cpp) test : https://github.com/euphony-io/euphony/tree/master/euphony/src/main/cpp/tests
네이티브는 위에서 참조하시면 되구요.
아래의 2가지 테스트는 다들 아실거라고 생각합니다.
Instrumental test : https://github.com/euphony-io/euphony/tree/master/euphony/src/androidTest/java/co/euphony/tx
junit(java) test : https://github.com/euphony-io/euphony/tree/master/euphony/src/test/java/euphony/lib
유닛테스트로 결과물을 만들어보세요. 예를 들어
https://github.com/euphony-io/euphony/blob/master/euphony/src/main/cpp/tests/packetTest.cpp
위는 parameterized 테스트라는 방법을 사용하고 있는데
예시를 보면 어떤 문자열이 들어왔을때 어떻게 패킷으로 바꿔줄지 expectedResult를 정답으로 잡아둡니다.
앞이 입력 문자이고, 뒤는 이에 대한 예상하는 결과를 사용합니다.
마치 알고리즘 문제 풀때 정답셋을 미리 제가 작성하는 것과 동일합니다.
그리고 이에 맞는 개발을 진행한다.
내가 예상한 expectedResult가 나오도록 기본 개발을 마친다.
기본 개발은 크게 가독성을 생각하지 않고 편하게 개발하시면 됩니다.
리펙토링한다.
예상결과가 실제 결과가 동일할때 유닛테스트를 믿고 열심히 리펙토링한다.
리펙토링을 하는 작업은 성능 향상에도 목적이 있을 수 있지만 대부분의 목적은 동료 개발자들과의 협업을 위해 진행합니다.
그래서 속도가 느려지는 경우가 많아요. 사실 객체지향이라는 것 자체가 속도보다는 가독성과 개발 확장 측면에 초점을 맞추고 있기 때문에
이때는 마음 놓고 속도에 엄청난 영향을 주는 것이 아니라면 extract method도 많이 하고 라인 관리 등 진행하시면 됩니다.
Beta Was this translation helpful? Give feedback.
All reactions