[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)