اختبارات القابلية للبرمجة التي تضمن العديد من النقاط الممتازة في تصميم الكود الفعال، مثل القابلية للصيانة؛ حيث تسهم في توفير الوثائق وتجعل التجديد وبناء تصميم تطوري/هيكلية أسهل. لا شك في ذلك، ولكن ما هي حزمة الاختبارات الجيدة لبدء مشروع؟ ستوضح هذه الفيديو الحزمة الاختبارية الأدنى لبدء مشروعك بلغة جافا.
النقطة الأولى التي يجب فهمها عندما نتحدث عن الحد الأدنى هي أنه لا يوجد رصاصات نقرية على حزمة الاختبارات. في النهاية، نحتاج لإضافة أو إزالة التبعيات، خاصة عندما نتحدث عن الكود القديم. وبالنظر إلى ذلك، سأعطي ما هو الحزمة الاختبارية المفضلة لدي بلغة جافا، وأستخدمها وأوصي بها كحد أدنى لبدء من الصفر:
-
JUnit-Jupiter: الإصدار الخامس من JUnit يفصل التوافق مع الإصدار السابق؛ ولكنه يستحق ذلك لأنه يجلب العديد من الميزات، وخاصة لإنشاء توسعات مخصصة.
-
Mockito: إطار الموك الشهير للغة جافا. هذه الشهرة ومجتمع كبير يمكّن العديد من التوسعات، مثل توسيع JUnit-Jupiter.
-
AssertJ: إذا كنت تحب API السلس مثلي، وبالتالي، AssertJ هي مكتبة غير عادية لك.
باستخدام مشروع maven، يمكنك إضافة تبعيات هذه المكتبات:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.verson}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>${mockito.verson}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.verson}</version>
<scope>test</scope>
</dependency>
في سياق بطولة كرة القدم، حيث لدينا فريق يجب أن يمتلك أحد عشر لاعباً، يجب أن يكون كل اسم فريداً في بطولة كرة القدم. يمكننا استكشاف الاختبارات عليه.
بدءاً بـ JMockito والاختبار، نحتاج لاختبار الخدمة حيث نحتاج للتحقق مما إذا كان الاسم موجوداً من قاعدة البيانات لتنفيذ المنطق. في هذه المرحلة، لا نحتاجه ولا نريد إنشاء اختبار تكامل.
نريد التركيز على العمل، لذا لا نريد اختبار قاعدة البيانات أو الإطار ولكن فقط قانوني. لذا، سنقوم بمحاكاة المستودع مع سيناريوين، عندما يكون هناك اسم وعندما لا يكون هناك.
باستخدام Mockito التكامل مع JUnit-Jupiter يمكنك حقن المحاكاة فقط باستخدام التعليمات البرمجية. الكود أدناه يظهر الاختبار باستخدام JMockito، حيث لا نحتاج لامتلاك قاعدة بيانات أو الخروج من التركيز لاختبار العمل.
@ExtendWith(MockitoExtension.class)
class ChampionshipServiceTest {
@Mock
private ChampionRepository repository;
@InjectMocks
private ChampionshipService service;
@Test
public void shouldRegister() {
Mockito.when(repository.existByName("Bahia")).thenReturn(false);
Team bahia = Team.of("Bahia");
service.register(bahia);
Mockito.verify(repository).existByName("Bahia");
}
@Test
@DisplayName("should return an exception when there is a team with a name")
public void shouldThrownAnExceptionWhenTeamNameExists() {
Mockito.when(repository.existByName("Bahia")).thenReturn(true);
Team bahia = Team.of("Bahia");
Assertions.assertThrows(IllegalArgumentException.class, () ->
service.register(bahia));
Mockito.verify(repository).existByName("Bahia");
}
}
AssertJ تجعل الادعاءات أسهل في الفهم، بفضل واجهة البيانات السلسة التي يدعمها المكتبة. يمكنك اختبار المجموعات، الخرائط، أو مثيل واحد. مثلا، يمكننا التحقق من إضافة طاقم إلى الفريق باستخدامه.
@Test
public void shouldCreatePlayers() {
Team bahia = Team.of("Bahia");
bahia.add(Player.of("Neymar", "Santos", 10));
bahia.add(Player.of("Cristiano Ronaldo", "Lisbon", 10));
org.assertj.core.api.Assertions.assertThat(bahia.players())
.hasSize(2)
.map(Player::name)
.contains("Neymar", "Cristiano Ronaldo");
}
خذ هذا والمزيد من المعلومات في هذا الفيديو.
الملخصات:
-
A minimum test stack to start Java
-
اكتشف المزيد حول JUnit ولماذا هو الخيار الجيد
-
اكتشف الموكس باستكشاف JMockito
-
جعل اختبارك جميلًا بواجهة البيانات السلسة Assert: AssertJ
Source:
https://dzone.com/articles/creating-your-swiss-army-knife-on-java-test-stack