คำถามติดแท็ก unit-testing

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

6
วิธีการจำลองการนำเข้าโมดูล ES6 ได้อย่างไร
ฉันมีโมดูล ES6 ต่อไปนี้: network.js export function getDataFromServer() { return ... } widget.js import { getDataFromServer } from 'network.js'; export class Widget() { constructor() { getDataFromServer("dataForWidget") .then(data => this.render(data)); } render() { ... } } getDataFromServerฉันกำลังมองหาวิธีการทดสอบเครื่องมือที่มีอินสแตนซ์ของจำลอง ถ้าฉันใช้<script>s แยกต่างหากจากโมดูล ES6 เช่นเดียวกับใน Karma ฉันสามารถเขียนการทดสอบของฉันเช่น: describe("widget", function() { it("should do stuff", function() { let …

17
jasmine: Async callback ไม่ได้ถูกเรียกใช้ภายในระยะเวลาที่กำหนดโดย jasmine.DEFAULT_TIMEOUT_INTERVAL
ฉันมีบริการเชิงมุมที่เรียกว่าrequestNotificationChannel: app.factory("requestNotificationChannel", function($rootScope) { var _DELETE_MESSAGE_ = "_DELETE_MESSAGE_"; function deleteMessage(id, index) { $rootScope.$broadcast(_DELETE_MESSAGE_, { id: id, index: index }); }; return { deleteMessage: deleteMessage }; }); ฉันพยายามทดสอบบริการโดยใช้ดอกมะลิ: "use strict"; describe("Request Notification Channel", function() { var requestNotificationChannel, rootScope, scope; beforeEach(function(_requestNotificationChannel_) { module("messageAppModule"); inject(function($injector, _requestNotificationChannel_) { rootScope = $injector.get("$rootScope"); scope = rootScope.$new(); …

5
Mockito: InvalidUseOfMatchersException
ฉันมีเครื่องมือบรรทัดคำสั่งที่ทำการตรวจสอบ DNS หากการตรวจสอบ DNS สำเร็จคำสั่งดำเนินการกับงานเพิ่มเติม ฉันพยายามเขียนการทดสอบหน่วยโดยใช้ Mockito นี่คือรหัสของฉัน: public class Command() { // .... void runCommand() { // .. dnsCheck(hostname, new InetAddressFactory()); // .. // do other stuff after dnsCheck } void dnsCheck(String hostname, InetAddressFactory factory) { // calls to verify hostname } } ฉันใช้ InetAddressFactory เพื่อเยาะเย้ยการใช้งานแบบคงที่ของInetAddressชั้นเรียน นี่คือรหัสสำหรับโรงงาน: public class …

4
ตัวอย่าง argumentCaptor ของ Mockito
ทุกคนช่วยยกตัวอย่างให้ฉันดูวิธีใช้org.mockito.ArgumentCaptorคลาสได้อย่างไรและมันแตกต่างจากแมทช์ง่ายๆที่มาพร้อมกับ mockito ฉันอ่านเอกสาร mockito ที่ให้มา แต่เอกสารเหล่านั้นไม่ได้อธิบายอย่างชัดเจนไม่มีผู้ใดสามารถอธิบายได้อย่างชัดเจน

23
สามารถเพิ่มการทดสอบหน่วยในโครงการผลิตที่มีอยู่ได้สำเร็จหรือไม่? ถ้าเป็นเช่นนั้นจะเป็นอย่างไรและคุ้มค่าไหม?
ฉันกำลังพิจารณาอย่างมากว่าจะเพิ่มการทดสอบหน่วยในโครงการที่มีอยู่ที่กำลังดำเนินการอยู่ มันเริ่มต้นเมื่อ 18 เดือนที่แล้วก่อนที่ฉันจะได้เห็นประโยชน์ของ TDD (ฝ่ามือใบหน้า)ดังนั้นตอนนี้มันจึงเป็นโซลูชั่นที่ค่อนข้างใหญ่ในโครงการหลายโครงการ สิ่งที่ทำให้ผมคิดว่านี่คือการที่บางครั้งข้อผิดพลาดเก่าดูเหมือนว่าจะ Resurface หรือข้อผิดพลาดที่มีการตรวจสอบในขณะที่คงที่โดยไม่ต้องจริงๆถูกกำหนด การทดสอบหน่วยจะลดหรือป้องกันปัญหาเหล่านี้ที่เกิดขึ้น โดยการอ่านคำถามที่คล้ายกันดังนั้นฉันเห็นคำแนะนำเช่นเริ่มที่ตัวติดตามบั๊กและเขียนกรณีทดสอบสำหรับแต่ละข้อบกพร่องเพื่อป้องกันการถดถอย อย่างไรก็ตามฉันกังวลว่าฉันจะจบลงด้วยการขาดภาพรวมและจบการทดสอบพื้นฐานที่ขาดหายไปซึ่งจะรวมอยู่ด้วยหากฉันใช้ TDD จากการเดินทาง มีกระบวนการ / ขั้นตอนใดบ้างที่ควรปฏิบัติตามเพื่อให้แน่ใจว่าโซลูชันที่มีอยู่นั้นได้รับการทดสอบอย่างถูกต้องตามหน่วยงาน ฉันจะแน่ใจได้ว่าการทดสอบที่มีคุณภาพดีและไม่เพียง แต่กรณีของการทดสอบใด ๆ จะดีกว่าการทดสอบไม่มี ดังนั้นฉันเดาว่าสิ่งที่ฉันถามก็คือ มันคุ้มค่ากับความพยายามในการแก้ปัญหาที่มีอยู่ในการผลิตหรือไม่? จะดีกว่าหรือไม่ที่จะเพิกเฉยต่อการทดสอบสำหรับโครงการนี้และเพิ่มในการเขียนในอนาคตที่เป็นไปได้? สิ่งที่จะเป็นประโยชน์มากขึ้น ใช้เวลาสองสามสัปดาห์ในการเพิ่มการทดสอบหรือไม่กี่สัปดาห์ที่จะเพิ่มฟังก์ชั่น? (เห็นได้ชัดว่าคำตอบของประเด็นที่สามนั้นขึ้นอยู่กับว่าคุณกำลังพูดคุยกับผู้บริหารหรือนักพัฒนา) เหตุผลในการรับรางวัล การเพิ่มเงินรางวัลเพื่อพยายามและดึงดูดคำตอบที่กว้างขึ้นซึ่งไม่เพียง แต่ยืนยันความสงสัยที่มีอยู่ของฉันว่ามันเป็นเรื่องดีที่ต้องทำ แต่ยังมีเหตุผลที่ดีบางประการ ฉันตั้งเป้าหมายที่จะเขียนคำถามนี้ในภายหลังด้วยข้อดีข้อเสียเพื่อลองและแสดงให้ผู้บริหารเห็นว่ามันคุ้มค่ากับการใช้เวลาทำงานในการขับเคลื่อนการพัฒนาในอนาคตของผลิตภัณฑ์ไปยัง TDD ฉันต้องการที่จะเข้าใกล้ความท้าทายนี้และพัฒนาเหตุผลของฉันโดยไม่มีมุมมองที่ลำเอียงของตัวเอง

11
การทดสอบหน่วยด้วย Spring Security
บริษัท ของฉันกำลังประเมิน Spring MVC เพื่อพิจารณาว่าเราควรใช้ในโครงการต่อไปของเราหรือไม่ จนถึงตอนนี้ฉันชอบสิ่งที่ฉันเห็นและตอนนี้ฉันกำลังดูโมดูลความปลอดภัยของสปริงเพื่อตรวจสอบว่าเป็นสิ่งที่เราสามารถ / ควรใช้ ข้อกำหนดด้านความปลอดภัยของเราค่อนข้างพื้นฐาน ผู้ใช้เพียงแค่ต้องสามารถให้ชื่อผู้ใช้และรหัสผ่านเพื่อให้สามารถเข้าถึงบางส่วนของเว็บไซต์ (เช่นเพื่อรับข้อมูลเกี่ยวกับบัญชีของพวกเขา); และมีหน้าเว็บจำนวนหนึ่งบนไซต์ (คำถามที่พบบ่อยการสนับสนุน ฯลฯ ) ซึ่งผู้ใช้ที่ไม่ระบุชื่อควรได้รับสิทธิ์เข้าถึง ในต้นแบบที่ฉันสร้างฉันได้จัดเก็บวัตถุ "LoginCredentials" (ซึ่งเพิ่งมีชื่อผู้ใช้และรหัสผ่าน) ในเซสชันสำหรับผู้ใช้ที่ได้รับการรับรองความถูกต้อง คอนโทรลเลอร์บางตัวตรวจสอบว่าวัตถุนี้อยู่ในเซสชันเพื่อรับการอ้างอิงถึงชื่อผู้ใช้ที่เข้าสู่ระบบหรือไม่ ฉันต้องการแทนที่ตรรกะที่พัฒนาขึ้นเองด้วย Spring Security แทนซึ่งจะมีประโยชน์อย่างมากในการลบ "เราจะติดตามผู้ใช้ที่เข้าสู่ระบบได้อย่างไร" และ "เราจะตรวจสอบผู้ใช้อย่างไร" จากตัวควบคุม / รหัสธุรกิจของฉัน ดูเหมือนว่า Spring Security จะมีวัตถุ "บริบท" เพื่อให้สามารถเข้าถึงชื่อผู้ใช้ / ข้อมูลหลักจากที่ใดก็ได้ในแอปของคุณ ... Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); ... ซึ่งดูเหมือนว่าจะไม่มีสปริงเหมือนวัตถุนี้เป็นซิงเกิล (ทั่วโลก) ในทางใดทางหนึ่ง คำถามของฉันคือ: หากนี่เป็นวิธีมาตรฐานในการเข้าถึงข้อมูลเกี่ยวกับผู้ใช้ที่ได้รับการรับรองความถูกต้องใน …

9
เราจะรันวิธีทดสอบด้วยพารามิเตอร์หลายตัวใน MSTest ได้อย่างไร
NUnit มีคุณสมบัติที่เรียกว่าค่าเช่นด้านล่าง: [Test] public void MyTest( [Values(1,2,3)] int x, [Values("A","B")] string s) { // ... } ซึ่งหมายความว่าวิธีการทดสอบจะทำงานหกครั้ง: MyTest(1, "A") MyTest(1, "B") MyTest(2, "A") MyTest(2, "B") MyTest(3, "A") MyTest(3, "B") ตอนนี้เรากำลังใช้ MSTest แต่มีสิ่งใดเทียบเท่ากับสิ่งนี้เพื่อให้ฉันสามารถรันการทดสอบเดียวกันด้วยพารามิเตอร์หลายตัวได้หรือไม่ [TestMethod] public void Mytest() { // ... }

9
สร้างคลาสทดสอบใน IntelliJ
ฉันกำลังทำงานภายในโครงสร้างโครงการ Maven Java แบบดั้งเดิมภายใน IntelliJ เช่น main/java/com/x/y test/java/com/x/y เมื่อฉันสร้างชั้นที่เรียกว่าฟูในหลัก / java / co.th / x / y ที่ใช้ IntelliJ ผมอยากจะได้โดยอัตโนมัติไฟล์ที่เรียกว่า FooTest.java สร้างขึ้นในการทดสอบ / java / co.th / Y / X ใน Eclipse มีปุ่มบนแถบเครื่องมือที่จะทำงานส่วนใหญ่ที่เกี่ยวข้องกับการสร้างคลาสทดสอบโครงกระดูกมีใครรู้จักสิ่งที่คล้ายกันใน IntelliJ หรือไม่? ขอบคุณ

6
Python unittests ใน Jenkins?
คุณจะให้เจนกินส์ดำเนินการกับ python unittest case ได้อย่างไร? เป็นไปได้ไหมที่จะส่งออก XML สไตล์ JUnit จากunittestแพ็คเกจในตัว

5
Mockito: วิธีการทิ่มแทงที่ส่งคืนประเภทด้วย Wild-Cards ที่ถูกผูกไว้
พิจารณารหัสนี้: public class DummyClass { public List<? extends Number> dummyMethod() { return new ArrayList<Integer>(); } } public class DummyClassTest { public void testMockitoWithGenerics() { DummyClass dummyClass = Mockito.mock(DummyClass.class); List<? extends Number> someList = new ArrayList<Integer>(); Mockito.when(dummyClass.dummyMethod()).thenReturn(someList); //Compiler complains about this } } คอมไพเลอร์บ่นเกี่ยวกับบรรทัดที่พยายามทำให้พฤติกรรมสำหรับdummyMethod(). คำแนะนำใด ๆ เกี่ยวกับวิธีการที่ใช้วิธีการขีดฆ่าที่ส่งคืนประเภทที่มีไวด์การ์ดที่มีขอบเขต?

2
CMake: โครงสร้างโครงการพร้อมการทดสอบหน่วย
ฉันกำลังพยายามจัดโครงสร้างโครงการของฉันเพื่อรวมแหล่งผลิต (ในsrcโฟลเดอร์ย่อย) และการทดสอบ (ในtestโฟลเดอร์ย่อย) ฉันใช้ CMake เพื่อสร้างสิ่งนี้ ตัวอย่างเล็ก ๆ น้อย ๆ ฉันมีไฟล์ต่อไปนี้: CMakeLists.txt: cmake_minimum_required (VERSION 2.8) project (TEST) add_subdirectory (src) add_subdirectory (test) src / CMakeLists.txt: add_executable (demo main.cpp sqr.cpp) src / sqr.h #ifndef SQR_H #define SQR_H double sqr(double); #endif // SQR_H src / sqr.cpp #include "sqr.h" double sqr(double x) { …

11
รหัสการทดสอบหน่วยที่มีการพึ่งพาระบบไฟล์
ฉันกำลังเขียนองค์ประกอบที่ให้ไฟล์ ZIP ต้อง: แตกไฟล์ ค้นหา dll ที่ระบุในไฟล์ที่คลายซิป โหลด dll นั้นผ่านการสะท้อนกลับและเรียกใช้วิธีการนั้น ฉันต้องการทดสอบหน่วยส่วนนี้ ฉันอยากเขียนโค้ดที่เกี่ยวข้องโดยตรงกับระบบไฟล์: void DoIt() { Zip.Unzip(theZipFile, "C:\\foo\\Unzipped"); System.IO.File myDll = File.Open("C:\\foo\\Unzipped\\SuperSecret.bar"); myDll.InvokeSomeSpecialMethod(); } แต่คนมักพูดว่า "อย่าเขียนการทดสอบหน่วยที่พึ่งพาระบบไฟล์ฐานข้อมูลเครือข่าย ฯลฯ " ถ้าฉันจะเขียนมันด้วยวิธีทดสอบที่เป็นมิตรฉันคิดว่ามันจะเป็นแบบนี้: void DoIt(IZipper zipper, IFileSystem fileSystem, IDllRunner runner) { string path = zipper.Unzip(theZipFile); IFakeFile file = fileSystem.Open(path); runner.Run(file); } เย้! ตอนนี้มันทดสอบได้ ฉันสามารถป้อนทดสอบเป็นสองเท่า (mocks) …

5
เอาชนะการผูกมัดใน Guice
ฉันเพิ่งเริ่มเล่นกับ Guice และกรณีใช้งานที่ฉันคิดได้ก็คือในการทดสอบฉันแค่ต้องการแทนที่การเชื่อมโยงเดียว ฉันคิดว่าฉันต้องการใช้การเชื่อมโยงระดับการผลิตที่เหลือเพื่อให้แน่ใจว่าทุกอย่างมีการตั้งค่าอย่างถูกต้องและเพื่อหลีกเลี่ยงการทำซ้ำ ลองจินตนาการว่าฉันมีโมดูลต่อไปนี้ public class ProductionModule implements Module { public void configure(Binder binder) { binder.bind(InterfaceA.class).to(ConcreteA.class); binder.bind(InterfaceB.class).to(ConcreteB.class); binder.bind(InterfaceC.class).to(ConcreteC.class); } } และในการทดสอบของฉันฉันต้องการแทนที่ InterfaceC เท่านั้นในขณะที่รักษา InterfaceA และ InterfaceB ไว้ด้วยดังนั้นฉันจึงต้องการ: Module testModule = new Module() { public void configure(Binder binder) { binder.bind(InterfaceC.class).to(MockC.class); } }; Guice.createInjector(new ProductionModule(), testModule); ฉันได้ลองทำสิ่งต่อไปนี้โดยไม่มีโชค: Module testModule = new …
138 java  unit-testing  guice 

15
คุณทำการทดสอบหน่วยในโครงการเดียวกันหรือโครงการอื่นหรือไม่
คุณใส่การทดสอบหน่วยในโครงการเดียวกันเพื่อความสะดวกหรือคุณวางการทดสอบแยกต่างหากหรือไม่? หากคุณใส่พวกเขาในการชุมนุมแยกต่างหากเช่นที่เราทำเราจะจบลงด้วยจำนวนโครงการพิเศษในการแก้ปัญหา มันยอดเยี่ยมสำหรับการทดสอบหน่วยในขณะที่เขียนโค้ด แต่คุณจะปล่อยแอพพลิเคชั่นอย่างไรโดยไม่ต้องมีชุดประกอบพิเศษเหล่านี้ทั้งหมด?
137 c#  unit-testing 

16
วิธีใดที่ดีที่สุดในการทดสอบหน่วยการป้องกันและวิธีการส่วนตัวใน Ruby
วิธีใดที่ดีที่สุดในการทดสอบหน่วยที่มีการป้องกันและวิธีการส่วนตัวใน Ruby โดยใช้Test::Unitกรอบมาตรฐาน Ruby ฉันแน่ใจว่าจะมีใครสักคนพูดขึ้นและยืนยันโดยดันทุรังว่า "คุณควรทดสอบเฉพาะวิธีการสาธารณะเท่านั้นหากจำเป็นต้องมีการทดสอบหน่วยก็ไม่ควรเป็นวิธีการป้องกันหรือเป็นส่วนตัว" แต่ฉันไม่ได้สนใจที่จะถกเถียงเรื่องนี้จริงๆ ฉันมีวิธีการหลายอย่างที่ได้รับการป้องกันหรือเป็นส่วนตัวด้วยเหตุผลที่ดีและถูกต้องวิธีการส่วนตัว / การป้องกันเหล่านี้มีความซับซ้อนพอสมควรและวิธีการสาธารณะในชั้นเรียนขึ้นอยู่กับวิธีการป้องกัน / ส่วนตัวเหล่านี้ที่ทำงานได้อย่างถูกต้องดังนั้นฉันจึงต้องการวิธีทดสอบ วิธีการป้องกัน / ส่วนตัว อีกอย่าง ... โดยทั่วไปฉันจะใส่วิธีการทั้งหมดสำหรับคลาสที่กำหนดไว้ในไฟล์เดียวและหน่วยทดสอบสำหรับคลาสนั้นในไฟล์อื่น ตามหลักการแล้วฉันต้องการให้เวทมนตร์ทั้งหมดใช้ฟังก์ชัน "การทดสอบหน่วยของวิธีการป้องกันและวิธีการส่วนตัว" นี้ในไฟล์ทดสอบหน่วยไม่ใช่ไฟล์ต้นฉบับหลักเพื่อให้ไฟล์ต้นฉบับหลักเรียบง่ายและตรงไปตรงมาที่สุด

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