คุณจะทดสอบวิธีการส่วนตัวได้อย่างไร


184

ฉันกำลังทำงานกับโปรเจ็กต์ java ฉันยังใหม่กับการทดสอบหน่วย เป็นวิธีที่ดีที่สุดในการทดสอบหน่วยวิธีส่วนตัวในชั้นเรียน java อะไร


1
ตรวจสอบคำถามนี้ใน StackOverflow มีการพูดถึงและพูดถึงเทคนิคสองสามอย่าง วิธีที่ดีที่สุดในการทดสอบหน่วยวิธีส่วนตัวคืออะไร
Chiron

34
ความคิดเห็นของฉันได้เสมอว่าวิธีส่วนตัวไม่จำเป็นต้องทดสอบตามที่คุณควรจะทดสอบสิ่งที่มีอยู่ วิธีการสาธารณะ หากคุณไม่สามารถทำลายวิธีการสาธารณะได้จริง ๆ แล้วมันสำคัญอย่างไรกับวิธีการส่วนตัวที่กำลังทำอยู่
Rig

1
ควรทดสอบวิธีการของรัฐและเอกชน ดังนั้นคนขับทดสอบโดยทั่วไปจะต้องอยู่ในชั้นเรียนที่จะทดสอบ เช่นนี้
แลกเปลี่ยน

2
@Rig - +1 - คุณควรจะสามารถเรียกใช้พฤติกรรมที่ต้องการทั้งหมดของวิธีการส่วนตัวจากวิธีการสาธารณะของคุณ - ถ้าคุณไม่สามารถใช้งานได้ไม่สามารถเรียกใช้ฟังก์ชันต่อไปได้ดังนั้นจึงไม่มีประเด็นในการทดสอบ
James Anderson

ใช้@JailbreakจากกรอบManifoldเพื่อเข้าถึงวิธีการส่วนตัวโดยตรง วิธีนี้รหัสทดสอบของคุณจะปลอดภัยและสามารถอ่านได้ เหนือสิ่งอื่นใดไม่มีการประนีประนอมในการออกแบบไม่มีวิธีการและการเปิดรับแสงมากเกินไปสำหรับการทดสอบ
สกอตต์

คำตอบ:


239

โดยทั่วไปคุณไม่ได้ทดสอบหน่วยวิธีการส่วนตัวโดยตรง เนื่องจากเป็นข้อมูลส่วนบุคคลให้พิจารณารายละเอียดการใช้งาน ไม่มีใครเคยเรียกหนึ่งในพวกเขาและคาดหวังว่ามันจะทำงานในรูปแบบเฉพาะ

คุณควรทดสอบส่วนต่อประสานสาธารณะแทน หากวิธีการที่เรียกวิธีการส่วนตัวของคุณทำงานอย่างที่คุณคาดไว้คุณจะถือว่าส่วนขยายนั้นวิธีส่วนตัวของคุณทำงานอย่างถูกต้อง


39
+1 พันล้าน และถ้าไม่เคยเรียกใช้เมธอดส่วนตัวอย่าทดสอบหน่วยให้ลบออก!
Steven A. Lowe

246
ฉันไม่เห็นด้วย. บางครั้งวิธีการส่วนตัวเป็นเพียงรายละเอียดการใช้งาน แต่ก็ยังมีความซับซ้อนพอที่จะรับประกันการทดสอบเพื่อให้แน่ใจว่าทำงานได้ถูกต้อง อินเทอร์เฟซสาธารณะอาจเสนอนามธรรมที่สูงเกินไปในการเขียนแบบทดสอบซึ่งกำหนดเป้าหมายโดยตรงกับอัลกอริทึมเฉพาะนี้ มันไม่ได้เป็นไปได้เสมอที่จะแยกออกเป็นคลาสอื่นเนื่องจากข้อมูลที่ใช้ร่วมกัน ในกรณีนี้ฉันว่ามันก็โอเคที่จะทดสอบวิธีการส่วนตัว
quant_dev

10
แน่นอนลบมัน เหตุผลเดียวที่อาจเป็นไปได้ที่จะไม่ลบฟังก์ชั่นที่คุณไม่ได้ใช้คือถ้าคุณคิดว่าคุณอาจจำเป็นต้องใช้ในอนาคตและแม้ว่าคุณควรจะลบ แต่ควรสังเกตฟังก์ชั่นในบันทึกการกระทำของคุณหรืออย่างน้อยก็แสดงความคิดเห็น ผู้คนรู้ว่ามันเป็นสิ่งพิเศษที่พวกเขาสามารถเพิกเฉยได้
jhocking

38
@quant_dev: บางครั้งชั้นจะต้อง refactored ลงในหลายชั้นเรียนอื่น ๆ ข้อมูลที่แชร์ของคุณสามารถดึงเข้าไปในชั้นเรียนอื่นได้เช่นกัน พูดเป็นคลาส "บริบท" จากนั้นคลาสใหม่สองคลาสของคุณสามารถอ้างถึงคลาสบริบทสำหรับข้อมูลที่แบ่งใช้ สิ่งนี้อาจดูไม่สมเหตุสมผล แต่ถ้าวิธีการส่วนตัวของคุณซับซ้อนพอที่จะต้องทำการทดสอบแยกต่างหากมันเป็นกลิ่นรหัสที่บ่งบอกว่ากราฟวัตถุของคุณต้องกลายเป็นเม็ดเล็ก ๆ น้อย ๆ
Phil

43
คำตอบนี้ไม่ตอบคำถาม คำถามคือวิธีการที่ควรวิธีเอกชนได้รับการทดสอบไม่ว่าพวกเขาควรจะได้รับการทดสอบ ไม่ว่าจะเป็นวิธีการที่ภาคเอกชนควรได้รับการทดสอบหน่วยเป็นคำถามที่น่าสนใจและคุ้มค่าของการอภิปราย แต่ไม่ได้ที่นี่ คำตอบที่เหมาะสมคือเพิ่มความคิดเห็นในคำถามที่ระบุว่าการทดสอบวิธีการส่วนตัวอาจไม่ใช่ความคิดที่ดีและให้ลิงก์ไปยังคำถามที่แยกต่างหากซึ่งจะเข้าไปในเรื่องที่ลึกซึ้งยิ่งขึ้น
TallGuy

118

โดยทั่วไปแล้วฉันจะหลีกเลี่ยง หากวิธีการส่วนตัวของคุณซับซ้อนมากจนต้องใช้การทดสอบหน่วยแยกต่างหากก็มักจะหมายความว่าสมควรได้รับคลาสของตัวเอง สิ่งนี้อาจกระตุ้นให้คุณเขียนด้วยวิธีที่สามารถใช้ซ้ำได้ จากนั้นคุณควรทดสอบคลาสใหม่และเรียกใช้อินเทอร์เฟซสาธารณะในคลาสเก่าของคุณ

ในทางกลับกันบางครั้งการแยกแยะรายละเอียดการใช้งานออกเป็นคลาสที่แยกจากกันจะนำไปสู่คลาสที่มีอินเตอร์เฟสที่ซับซ้อนข้อมูลจำนวนมากที่ส่งผ่านระหว่างคลาสเก่าและคลาสใหม่หรือการออกแบบที่อาจดูดีจากมุมมองของ OOP จับคู่กับสัญชาติญาณที่มาจากโดเมนปัญหา (เช่นการแยกโมเดลราคาออกเป็นสองส่วนเพื่อหลีกเลี่ยงการทดสอบวิธีการส่วนตัวนั้นไม่ง่ายนักและอาจนำไปสู่ปัญหาในภายหลังเมื่อทำการบำรุงรักษา / ขยายรหัส) คุณไม่ต้องการที่จะมี "คลาสคู่" ซึ่งเปลี่ยนไปด้วยกันเสมอ

เมื่อต้องเผชิญกับทางเลือกระหว่างการห่อหุ้มและการทดสอบฉันต้องการไปที่สอง สิ่งสำคัญคือต้องมีรหัสที่ถูกต้อง (เช่นสร้างผลลัพธ์ที่ถูกต้อง) กว่าการออกแบบ OOP ที่ดีซึ่งทำงานไม่ถูกต้องเพราะมันไม่ได้ทดสอบอย่างเพียงพอ ใน Java คุณสามารถให้วิธีการ "เริ่มต้น" การเข้าถึงและทดสอบหน่วยในแพคเกจเดียวกัน การทดสอบหน่วยเป็นเพียงส่วนหนึ่งของแพคเกจที่คุณกำลังพัฒนาและมันก็โอเคที่จะมีการพึ่งพาระหว่างการทดสอบและรหัสที่จะถูกทดสอบ หมายความว่าเมื่อคุณเปลี่ยนการใช้งานคุณอาจต้องเปลี่ยนการทดสอบของคุณ แต่ก็ไม่เป็นไร - การเปลี่ยนแปลงของการติดตั้งแต่ละครั้งนั้นจำเป็นต้องทำการทดสอบรหัสอีกครั้งและหากการทดสอบนั้นจำเป็นต้องแก้ไขเพื่อให้ทำเช่นนั้นคุณก็ทำได้ มัน.

โดยทั่วไปคลาสอาจเสนอมากกว่าหนึ่งอินเตอร์เฟส มีส่วนต่อประสานสำหรับผู้ใช้และส่วนต่อประสานสำหรับผู้ดูแล คนที่สองสามารถเปิดเผยเพิ่มเติมเพื่อให้แน่ใจว่ารหัสมีการทดสอบอย่างเพียงพอ มันไม่จำเป็นต้องเป็นการทดสอบหน่วยในวิธีการแบบส่วนตัว - ตัวอย่างเช่นการบันทึก การบันทึกยัง "หยุดการห่อหุ้ม" แต่เรายังคงทำเพราะมันมีประโยชน์มาก


9
+1 จุดที่น่าสนใจ ในท้ายที่สุดมันเกี่ยวกับการบำรุงรักษาไม่ยึดติดกับ "กฎ" ของ OOP ที่ดี
Phil

9
+1 ฉันเห็นด้วยอย่างยิ่งกับความสามารถในการทดสอบมากกว่าการห่อหุ้ม
Richard

31

การทดสอบวิธีการส่วนตัวจะขึ้นอยู่กับความซับซ้อนของพวกเขา วิธีการส่วนตัวแบบหนึ่งบรรทัดจะไม่รับประกันความพยายามพิเศษของการทดสอบ (ซึ่งอาจกล่าวได้ว่าวิธีการแบบสาธารณะ) แต่วิธีการแบบส่วนตัวบางอย่างอาจซับซ้อนพอ ๆ กับวิธีการแบบสาธารณะและยากที่จะทดสอบผ่านส่วนต่อประสานสาธารณะ

เทคนิคที่ฉันชอบคือการทำให้แพคเกจวิธีส่วนตัวเป็นส่วนตัวซึ่งจะอนุญาตให้เข้าถึงการทดสอบหน่วยในแพคเกจเดียวกัน แต่มันจะยังคงถูกห่อหุ้มจากรหัสอื่น ๆ ทั้งหมด สิ่งนี้จะให้ประโยชน์จากการทดสอบตรรกะวิธีส่วนตัวโดยตรงแทนที่จะต้องอาศัยการทดสอบวิธีสาธารณะเพื่อครอบคลุมทุกส่วนของตรรกะที่ซับซ้อน (อาจ)

หากสิ่งนี้จับคู่กับคำอธิบายประกอบ @VisibleForTesting ในห้องสมุด Google Guava คุณกำลังทำเครื่องหมายวิธีการส่วนตัวของแพคเกจนี้อย่างชัดเจนว่ามองเห็นได้สำหรับการทดสอบเท่านั้นและไม่ควรเรียกชั้นเรียนอื่น ๆ

ฝ่ายตรงข้ามของเทคนิคนี้ยืนยันว่าสิ่งนี้จะทำลาย encapsulation และเปิดวิธีการส่วนตัวเพื่อรหัสในแพคเกจเดียวกัน ในขณะที่ฉันยอมรับว่าการแบ่ง encapsulation และเปิดรหัสส่วนตัวไปยังคลาสอื่นฉันยืนยันว่าการทดสอบตรรกะที่ซับซ้อนมีความสำคัญมากกว่าการห่อหุ้มที่เข้มงวดและไม่ใช้วิธีการส่วนตัวของแพคเกจที่มีการทำเครื่องหมายอย่างชัดเจนว่ามองเห็นได้สำหรับการทดสอบเท่านั้น การใช้และการเปลี่ยนรหัสฐาน

วิธีการส่วนตัวก่อนทดสอบ:

private int add(int a, int b){
    return a + b;
}

แพ็คเกจส่วนตัวพร้อมสำหรับการทดสอบ:

@VisibleForTesting
int add(int a, int b){
    return a + b;
}

หมายเหตุ: การวางการทดสอบในแพ็คเกจเดียวกันไม่เท่ากับการทดสอบในโฟลเดอร์ทางกายภาพเดียวกัน การแยกรหัสหลักและรหัสทดสอบของคุณออกเป็นโครงสร้างโฟลเดอร์แบบฟิสิคัลแยกเป็นแนวปฏิบัติที่ดีโดยทั่วไป แต่เทคนิคนี้จะทำงานได้ตราบใดที่คลาสมีการกำหนดไว้ในแพ็คเกจเดียวกัน


14

หากคุณไม่สามารถใช้ API ภายนอกหรือไม่ต้องการคุณยังคงสามารถใช้ JDK API มาตรฐานเพื่อเข้าถึงวิธีการส่วนตัวโดยใช้การสะท้อนกลับ นี่คือตัวอย่าง

MyObject obj = new MyObject();
Method privateMethod = MyObject.class.getDeclaredMethod("getFoo", null);
privateMethod.setAccessible(true);
String returnValue = (String) privateMethod.invoke(obj, null);
System.out.println("returnValue = " + returnValue);

ตรวจสอบ Java Tutorial http://docs.oracle.com/javase/tutorial/reflect/หรือ Java API http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/package-summary htmlสำหรับข้อมูลเพิ่มเติม

ตามที่ @ kij อ้างถึงคำตอบของเขามีหลายครั้งที่วิธีง่ายๆในการใช้การสะท้อนนั้นดีมากในการทดสอบวิธีการส่วนตัว


9

กรณีทดสอบหน่วยหมายถึงการทดสอบหน่วยของรหัส ไม่ได้หมายถึงการทดสอบอินเตอร์เฟสเพราะถ้าคุณกำลังทดสอบอินเตอร์เฟสนั่นไม่ได้หมายความว่าคุณกำลังทดสอบหน่วยของรหัส มันกลายเป็นการทดสอบกล่องดำ นอกจากนี้ยังเป็นการดีกว่าที่จะค้นหาปัญหาในระดับหน่วยที่เล็กที่สุดกว่าการกำหนดปัญหาในระดับอินเทอร์เฟซแล้วลองดีบั๊กว่าส่วนใดไม่ทำงาน ดังนั้นกรณีทดสอบหน่วยควรทดสอบโดยไม่คำนึงถึงขอบเขต ต่อไปนี้เป็นวิธีการทดสอบวิธีการส่วนตัว

หากคุณใช้จาวาคุณสามารถใช้ jmockit ซึ่งให้ Deencapsulation.invoke เพื่อเรียกใช้เมธอดส่วนตัวของคลาสภายใต้การทดสอบ มันใช้การสะท้อนที่เรียกว่าในที่สุด แต่ให้เสื้อคลุมที่ดีรอบ ( https://code.google.com/p/jmockit/ )


คำถามนี้ถามคำถามนี้อย่างไร
ริ้น

@gnat, คำถามคือสิ่งที่เป็นวิธีที่ดีที่สุดในการทดสอบหน่วยวิธีส่วนตัวในชั้นเรียน java? และจุดแรกของฉันตอบคำถาม
agrawalankur

จุดแรกของคุณเพียงลงโฆษณาเครื่องมือ แต่ก็ไม่ได้อธิบายว่าทำไมคุณเชื่อว่ามันจะดีกว่าทางเลือกเช่นเช่นการทดสอบวิธีเอกชนทางอ้อมตามที่ได้แนะนำและอธิบายในคำตอบด้านบน
ริ้น

jmockit ได้ย้ายแล้วและหน้าเก่าอย่างเป็นทางการชี้ไปที่บทความเกี่ยวกับ "ปัสสาวะสังเคราะห์และฉี่ประดิษฐ์" ซึ่งยังคงเกี่ยวข้องกับสิ่งที่ล้อเลียน แต่ไม่เกี่ยวข้องที่นี่ :) หน้าอย่างเป็นทางการใหม่คือ: jmockit.github.io
Guillaume

8

ก่อนอื่นตามที่ผู้เขียนคนอื่นแนะนำ: คิดสองครั้งถ้าคุณจำเป็นต้องทดสอบวิธีการส่วนตัว และถ้าเป็นเช่นนั้น ...

ใน. NET คุณสามารถแปลงเป็นวิธีการ "ภายใน" และทำให้แพคเกจ " InternalVisible " กับโครงการทดสอบหน่วยของคุณ

ใน Java คุณสามารถเขียนแบบทดสอบในชั้นเรียนเพื่อทดสอบและวิธีการทดสอบของคุณควรจะเรียกวิธีส่วนตัวเช่นกัน ฉันไม่มีประสบการณ์ Java ขนาดใหญ่จริงๆดังนั้นนั่นอาจไม่ใช่วิธีปฏิบัติที่ดีที่สุด

ขอบคุณ


7

ฉันมักจะทำให้วิธีการดังกล่าวได้รับการคุ้มครอง สมมติว่าคลาสของคุณอยู่ใน:

src/main/java/you/Class.java

คุณสามารถสร้างคลาสการทดสอบเป็น:

src/test/java/you/TestClass.java

ตอนนี้คุณสามารถเข้าถึงวิธีที่ได้รับการป้องกันและสามารถทดสอบหน่วยเหล่านั้นได้ (JUnit หรือ TestNG ไม่สำคัญเลย) แต่คุณยังคงวิธีการเหล่านี้จากผู้โทรที่คุณไม่ต้องการ

โปรดทราบว่าสิ่งนี้คาดว่าจะมีต้นกำเนิดของสไตล์ maven


3

หากคุณต้องการจริงๆที่จะทดสอบวิธีการส่วนตัวกับ Java ฉันหมายความว่าคุณสามารถใช้และfest assert / หรือ fest reflectมันใช้การสะท้อน

นำเข้าไลบรารีด้วย maven (เวอร์ชันที่ระบุไม่ใช่เวอร์ชันล่าสุดที่ฉันคิด) หรือนำเข้าโดยตรงใน classpath ของคุณ:

<dependency>
     <groupId>org.easytesting</groupId>
     <artifactId>fest-assert</artifactId>
     <version>1.4</version>
    </dependency>

    <dependency>
     <groupId>org.easytesting</groupId>
     <artifactId>fest-reflect</artifactId>
    <version>1.2</version>
</dependency>

ตัวอย่างเช่นถ้าคุณมีคลาสชื่อ 'MyClass' ด้วยเมธอดส่วนตัวที่ชื่อว่า 'myPrivateMethod' ซึ่งใช้สตริงเป็นพารามิเตอร์ให้อัปเดตค่าเป็น 'นี่คือการทดสอบที่ยอดเยี่ยม!' คุณสามารถทำการทดสอบ Junit ต่อไปนี้:

import static org.fest.reflect.core.Reflection.method;
...

MyClass objectToTest;

@Before
public void setUp(){
   objectToTest = new MyClass();
}

@Test
public void testPrivateMethod(){
   // GIVEN
   String myOriginalString = "toto";
   // WHEN
   method("myPrivateMethod").withParameterTypes(String.class).in(objectToTest).invoke(myOriginalString);
   // THEN
   Assert.assertEquals("this is cool testing !", myOriginalString);
}

ไลบรารีนี้ยังช่วยให้คุณสามารถแทนที่คุณสมบัติ bean ใด ๆ (ไม่ว่าจะเป็นแบบส่วนตัวและไม่มีการเขียนตัวตั้งค่า) โดยจำลองและใช้สิ่งนี้กับ Mockito หรือกรอบงานจำลองอื่น ๆ ก็เจ๋งจริงๆ สิ่งเดียวที่คุณต้องรู้ในขณะนี้ (ไม่ทราบว่าจะดีกว่าในรุ่นถัดไป) คือชื่อของเขตข้อมูล / วิธีการที่คุณต้องการจัดการและลายเซ็นของมัน


2
แม้ว่าการไตร่ตรองจะช่วยให้คุณสามารถทดสอบวิธีการส่วนตัวได้ แต่มันก็ไม่ดีสำหรับการตรวจจับการใช้งานของพวกเขา หากคุณเปลี่ยนชื่อของวิธีส่วนตัวสิ่งนี้จะทำให้การทดสอบของคุณหยุดชะงัก
ริชาร์ด

1
การทดสอบจะแตกหักใช่ แต่นี่เป็นปัญหาเล็กน้อยจากมุมมองของฉันแน่นอนว่าฉันเห็นด้วยอย่างเต็มที่เกี่ยวกับคำอธิบายของคุณด้านล่างในการมองเห็นแพ็คเกจ (ด้วยคลาสการทดสอบในโฟลเดอร์แยกต่างหาก แต่มีแพ็คเกจเดียวกัน) แต่บางครั้งคุณก็ไม่ มีทางเลือกจริงๆ ตัวอย่างเช่นถ้าคุณมีภารกิจสั้น ๆ ในองค์กรที่ไม่ได้ใช้วิธี "ดี" (ทดสอบคลาสที่ไม่ได้อยู่ในแพ็คเกจเดียวกัน ฯลฯ ) หากคุณไม่มีเวลาในการปรับโครงสร้างโค้ดที่คุณใช้งานอยู่ / การทดสอบนี้ยังคงเป็นทางเลือกที่ดี
kij

2

สิ่งที่ฉันทำตามปกติใน C # คือทำให้วิธีการของฉันได้รับการป้องกันและไม่เป็นส่วนตัว มันเป็นโมดิฟายเออร์ส่วนตัวที่เข้าถึงได้น้อยกว่าเล็กน้อย แต่มันซ่อนเมธอดจากคลาสทั้งหมดที่ไม่สืบทอดจากคลาสที่อยู่ภายใต้การทดสอบ

public class classUnderTest
{
   //this would normally be private
   protected void methodToTest()
   {
     //some code here
   }
}

คลาสใดที่ไม่สืบทอดโดยตรงจาก classUnderTest ไม่มีความคิดที่ว่า methodToTest ยังคงมีอยู่ ในรหัสทดสอบของฉันฉันสามารถสร้างคลาสการทดสอบพิเศษที่ขยายและให้การเข้าถึงวิธีนี้ ...

class TestingClass : classUnderTest
{
   public void methodToTest()
   {
     //this returns the method i would like to test
     return base.methodToTest();
   }
}

คลาสนี้มีอยู่ในโครงการทดสอบของฉันเท่านั้น มีวัตถุประสงค์เพียงอย่างเดียวคือให้การเข้าถึงวิธีการเดียวนี้ อนุญาตให้ฉันเข้าถึงสถานที่ที่คลาสอื่นส่วนใหญ่ไม่มี


4
protectedเป็นส่วนหนึ่งของ API สาธารณะและเกิดข้อ จำกัด เดียวกัน (ไม่สามารถเปลี่ยนแปลงได้จะต้องทำเป็นเอกสาร, ... ) ใน C # คุณสามารถใช้ร่วมกับinternal InternalsVisibleTo
CodesInChaos

1

คุณสามารถทดสอบวิธีการส่วนตัวได้อย่างง่ายดายหากคุณทำการทดสอบหน่วยในชั้นเรียนในชั้นเรียนที่คุณกำลังทดสอบ การใช้ TestNG การทดสอบหน่วยของคุณจะต้องเป็นคลาสภายในสแตติกสาธารณะที่มีคำอธิบายประกอบด้วย @Test เช่นนี้:

@Test
public static class UserEditorTest {
    public void test_private_method() {
       assertEquals(new UserEditor().somePrivateMethod(), "success");
    }
}

เนื่องจากเป็นชั้นในจึงสามารถเรียกใช้วิธีส่วนตัวได้

การทดสอบของฉันถูกเรียกใช้จาก Maven และจะค้นหากรณีทดสอบเหล่านี้โดยอัตโนมัติ ถ้าคุณแค่ต้องการทดสอบหนึ่งคลาสคุณสามารถทำได้

$ mvn test -Dtest=*UserEditorTest

ที่มา: http://www.ninthavenue.com.au/how-to-unit-test-private-methods


4
คุณกำลังแนะนำให้รวมถึงรหัสทดสอบ (และคลาสภายในเพิ่มเติม) ในรหัสจริงของแพ็คเกจที่ปรับใช้?

1
คลาสทดสอบเป็นคลาสภายในของคลาสที่คุณต้องการทดสอบ หากคุณไม่ต้องการให้มีการใช้งานคลาสภายในเหล่านั้นคุณสามารถลบไฟล์ * Test.class ออกจากแพ็คเกจของคุณ
Roger Keays

1
ฉันไม่ชอบตัวเลือกนี้ แต่สำหรับหลาย ๆ คนอาจเป็นทางออกที่ถูกต้องไม่คุ้มค่ากับการลงคะแนน
Bill K

@RogerKeays: เทคนิคเมื่อคุณทำการปรับใช้คุณจะลบ "test inner classes" ได้อย่างไร? โปรดอย่าพูดว่าคุณตัดมันด้วยมือ
gyorgyabraham

ฉันไม่ลบพวกมัน ใช่. ฉันปรับใช้รหัสที่ไม่เคยใช้งานในขณะใช้งาน มันเลวร้ายจริงๆ
Roger Keays
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.