Penutupan ujian unit: Gunakan kelas dalaman tanpa nama untuk mensimulasikan penutupan dan menggunakan pembolehubah tempatan sebagai pembolehubah ahli. Gunakan rangka kerja Mengejek untuk mengejek nilai pulangan atau panggilan penutupan. Penutupan nyahpepijat: Tetapkan titik putus untuk memeriksa nilai pembolehubah tempatan. Tambahkan pernyataan System.out.println dalam penutupan untuk memahami tingkah laku. Gunakan decompiler untuk melihat kod sumber Java yang telah dinyahkompilasi. . Walaupun kemudahan mereka, penyahpepijatan dan penutupan ujian boleh menjadi rumit. Artikel ini akan memberikan beberapa petua praktikal untuk membantu anda mengatasi cabaran ini.
Cara mengejek penutupan dalam ujian unit
Menggunakan kelas dalaman tanpa nama:
pembolehubah setempat
pembolehubah ahli kelas dalaman tanpa nama
dan kemudian akses pembolehubah ini dalam ujian anda.
Menggunakan System.out.println: Kadangkala menambahkan pernyataan System.out.println
pada penutupan boleh memberikan cerapan berharga tentang kelakuannya.
匿名内部类
可以模拟闭包的行为,而无需实际创建闭包。将 局部变量
作为 匿名内部类
的成员变量,然后即可在测试中访问这些变量。Mocking
框架(例如 Mockito)可用于模拟闭包的返回值或调用。这允许您隔离正在测试的代码,并验证闭包的预期行为。代码示例:
// 匿名内部类 class TestExample { private int localVariable; void doSomething() { Runnable runnable = new Runnable() { @Override public void run() { System.out.println(localVariable); } }; // ... } // 单元测试 @Test void testRunnable() { TestExample example = new TestExample(); example.localVariable = 10; Runnable runnable = example.createRunnable(); // 获取利用匿名内部类模拟的闭包 // 通过调用 run() 来执行闭包 runnable.run(); // 断言预期值 assertEquals(10, localVariable); } }
调试闭包的技巧
System.out.println
语句可以提供有关其行为的有价值的见解。避免闭包中的常见错误
闭包
中捕获的可变对象可能导致意外行为,因为它们的值可能会在闭包的生命周期内更改。闭包
在并发环境中使用,则需要考虑 thread safety
Atas ialah kandungan terperinci Ujian unit dan petua penyahpepijatan untuk penutupan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!