در دنیای برنامهنویسی، رویکرد Test Driven Development (TDD) و نوشتن Unit Test ها اهمیت بسیاری دارد. اما چرا اینقدر به خوانایی تستها تاکید میشود؟
در این مقاله به بررسی اهمیت خوانایی در تستهای واحد و تأثیر آن در توسعه نرمافزار میپردازیم.
خوانایی تستها به این معناست که هر کسی که کد شما را میخواند، بتواند به سادگی بفهمد که چه چیزی تست میشود و چه انتظاری از آن تست داریم. این ویژگی اهمیت بالایی دارد زیرا:
تستهای واحد باید سه ویژگی مهم داشته باشند: قابل نگهداری (Maintainability)، قابل اطمینان (Trustworthy) و خوانا بودن (Readability). از این میان، Readability مهمترین ویژگی است .
مفهوم مستندسازی زنده
مستندسازی زنده به این معناست که تستهای ما باید عملکرد سیستم را به صورت واضح بیان کنند. این تستها همراه با تغییرات کد، به روز میشوند و به عنوان مستندات زنده عمل میکنند.
مفهوم پیدا کردن سریع باگها
پیدا کردن محل دقیق باگها در کوتاهترین زمان ممکن از اهمیت بالایی برخوردار است. تستهای خوب میتوانند این کار را با شناسایی سریع مکان وقوع باگها انجام دهند.
انتخاب نام مناسب برای تستها نقش مهمی در افزایش خوانایی آنها دارد. به تست زیر دقت کنید:
[Fact] public void TestConstructorFailure() { // Arrange const string name = null; const int health = 100; const int damage = 10; // Assert Assert.Throws<NullReferenceException>(() => new Hero(name, health, damage)); }
در نگاه اول از نام این تست نمیتوان فهمید که چه چیزی تحت تست است.
با استفاده از یک الگوی نامگذاری مناسب، میتوان خوانایی تست را بهبود بخشید:
[Fact] public void Constructor_ShouldThrowException_WhenNameIsNull() { // Arrange const string name = null; const int health = 100; const int damage = 10; // Assert Assert.Throws<NullReferenceException>(() => new Hero(name, health, damage)); }
با این تغییر، حالا کاملاً مشخص است که این تست چه چیزی را بررسی میکند.
الگوهای متعددی برای نامگذاری تستها وجود دارد که برخی از آنها به شرح زیر است:
مثال: isAdult_AgeLessThan18_False
مثال: Should_ThrowException_When_AgeLessThan18
مثال: Given_UserIsAuthenticated_When_InvalidAccountNumberIsUsedToWithdrawMoney_Then_TransactionsWillFail
ساختار بدنه تستها باید به گونهای باشد که قابل فهم و نگهداری باشد. یکی از روشهای متداول برای ساختاردهی تستها استفاده از الگوی (Arrange, Act, Assert) است:
خوانایی در تستهای واحد یک ویژگی حیاتی است که نباید نادیده گرفته شود. تستهای خوانا نه تنها به عنوان مستندات زنده عمل میکنند بلکه پیدا کردن باگها را نیز سادهتر میکنند. با استفاده از الگوهای نامگذاری مناسب و ساختاردهی صحیح بدنه تستها، میتوان خوانایی و کارایی تستهای واحد را بهبود بخشید.