[HN Gopher] Show HN: Wasted hours on Unit tests, so I built VS C...
       ___________________________________________________________________
        
       Show HN: Wasted hours on Unit tests, so I built VS Code ext for AI
       tests
        
       Hey guys,  I'm investing a ton of time on writing unit tests, for
       both enterprise and personal projects.  I came up with the idea to
       make extension for AI-generated tests and cases within a VS Code.
       Happy to hear feedback, both positive and negative.
        
       Author : fmdz
       Score  : 5 points
       Date   : 2024-01-15 21:14 UTC (1 hours ago)
        
 (HTM) web link (marketplace.visualstudio.com)
 (TXT) w3m dump (marketplace.visualstudio.com)
        
       | graypegg wrote:
       | Anyone made the opposite product? Human written tests, that an AI
       | tries to make green?
        
         | fmdz wrote:
         | We are writting ton of such tests, on daily basis haha.
         | 
         | That is infinite process, we're all stuck within :-)
        
         | darkteflon wrote:
         | That's actually a really interesting idea. Particularly if you
         | take care to add docstrings and comments to the tests. Thanks!
        
       | lnxg33k1 wrote:
       | Is there a place where to see the code you're trying to test? My
       | primary use of unit tests is to understand if its clean and
       | maintainable code, so im likely your last user case, but wanted
       | to see what kind of code took hours to test
        
         | fmdz wrote:
         | Do you mean within overview page of extension, on examples
         | gif/images or within real flow in VS Code?
        
           | lnxg33k1 wrote:
           | Just some code examples of what was being tested
        
             | fmdz wrote:
             | Sure. Here is one example from run I performed just now.
             | 
             | TypeScript utility method I generated cases and tests for
             | -------                 static merge<T extends { id?:
             | string }>(arr1: T[], arr2: T[]): T[] {           arr1 =
             | arr1 || [];           arr2 = arr2 || [];                //
             | Create a map for quick access to items in arr1 by id
             | const map = new Map<string, T>(arr1.map((item) => [item.id,
             | item]));                // Iterate over arr2 and merge or
             | add items           arr2.forEach((item) => {
             | if (map.has(item.id)) {                 // If item exists
             | in arr1, merge it                 map.set(item.id, {
             | ...map.get(item.id), ...item });              } else {
             | // If item doesn't exist in arr1, add it
             | map.set(item.id, item);              }           });
             | // Convert the map back to an array           return
             | Array.from(map.values());        }
             | 
             | Generated test cases ------------- POSITIVE - Merging two
             | arrays with unique and overlapping objects by id Given: Two
             | arrays of objects with unique and overlapping ids When:
             | Merging two arrays of objects where some objects have
             | matching ids Then: Should return an array of merged objects
             | with no duplicates and combined properties for overlapping
             | ids
             | 
             | NEGATIVE - Merging arrays when second array contains
             | objects with undefined ids Given: First array of objects
             | with valid ids and second array with some objects having
             | undefined ids When: Second array contains objects with
             | undefined ids Then: Should throw an error or handle
             | undefined ids gracefully without merging those objects
             | 
             | EDGE CASE - Merging arrays where all objects in the second
             | array have matching ids in the first array Given: Two
             | arrays of objects with ids where the second array's objects
             | all have ids that match those in the first array When:
             | Every object in the second array has a matching id in the
             | first array Then: Should return an array with objects from
             | the first array having their properties updated by the
             | second array's objects
             | 
             | Generated unit tests by test cases -------------
             | 
             | ---> 1st case ---------------
             | 
             | it('Merging two arrays with unique and overlapping objects
             | by id should return an array of merged objects with no
             | duplicates and combined properties for overlapping ids', ()
             | => { // Arrange const arr1 = [{ id: '1', name: 'Alice' }, {
             | id: '2', name: 'Bob' }]; const arr2 = [{ id: '2', name:
             | 'Robert' }, { id: '3', name: 'Charlie' }]; const
             | expectedResult = [ { id: '1', name: 'Alice' }, { id: '2',
             | name: 'Robert' }, // Note: 'Bob' is overwritten by 'Robert'
             | { id: '3', name: 'Charlie' } ];                 // Act
             | const result = merge(arr1, arr2);            // Assert
             | expect(result).toEqual(expectedResult);
             | 
             | });
             | 
             | ---> 2nd case ----------------
             | 
             | it('Merging arrays when second array contains objects with
             | undefined ids should throw an error or handle undefined ids
             | gracefully', () => { // Arrange const arr1 = [{ id: '1',
             | name: 'Alice' }, { id: '2', name: 'Bob' }]; const arr2 = [{
             | id: '2', age: 30 }, { name: 'Charlie' }]; // Charlie has
             | undefined id                 // Act and Assert
             | expect(() => MyArrayUtils.merge(arr1, arr2)).toThrow();
             | 
             | });
             | 
             | ---> 3rd case ----------------
             | 
             | it('Merging arrays where all objects in the second array
             | have matching ids in the first array', () => { // Arrange
             | const arr1 = [{ id: '1', propA: 'A1' }, { id: '2', propA:
             | 'A2' }]; const arr2 = [{ id: '1', propB: 'B1' }, { id: '2',
             | propB: 'B2' }]; const expectedResult = [ { id: '1', propA:
             | 'A1', propB: 'B1' }, { id: '2', propA: 'A2', propB: 'B2' }
             | ];                 // Act       const result = merge(arr1,
             | arr2);            // Assert
             | expect(result).toEqual(expectedResult);
             | 
             | });
        
               | lnxg33k1 wrote:
               | Thanks! Im from the phone now and cant understand much
               | but will come back tomorrow
        
       ___________________________________________________________________
       (page generated 2024-01-15 23:01 UTC)