# How to write test case for a function which has aerospike.RecordSet as a return value

**URL:** <https://discuss.aerospike.com/t/how-to-write-test-case-for-a-function-which-has-aerospike-recordset-as-a-return-value/10362>\
**Category:** Go Client\
**Tags:** go\
**Created:** [July 25, 2023, 5:23am UTC](https://discuss.aerospike.com/t/how-to-write-test-case-for-a-function-which-has-aerospike-recordset-as-a-return-value/10362 "2023-07-25T05:23:26Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![sanketchalke](https://avatars.discourse-cdn.com/v4/letter/s/ad7895/32.png) [@sanketchalke](https://discuss.aerospike.com/u/sanketchalke)\
**Post date:** [July 25, 2023, 5:23am UTC](https://discuss.aerospike.com/t/how-to-write-test-case-for-a-function-which-has-aerospike-recordset-as-a-return-value/10362/1 "2023-07-25T05:23:26Z")

</div>

Hi All, we are writing test cases for “GetListOfUsers()” function of “UserService.go“ file. We are facing issue in creating dummy aerospike.RecordSet object

```auto
func (suite *UserServiceTestSuite) TestGetListOfUsers() {
    suite.mockUserRepository.EXPECT().QueryDataEquality(models.UserSet, "t_id", “test_team”).Return(Dummy_RecordSet_Object, nil)
    // how we can create dummy aerospike.RecordSet object ?
    userList, err := suite.userService.GetListOfUsers(suite.context, “test_team”)
    // suite.Error(err)
}

```

================ UsersRepository.go ———————

```auto
func (a *aerospike) QueryDataEquality(setName, binName, binData string) (*aero.Recordset, error) {
    stm := aero.NewStatement(a.Namespace, setName)
    err := stm.SetFilter(aero.NewEqualFilter(binName, binData))
    if err != nil {
        return nil, err
    }
    recordset, err := a.client.Query(nil, stm)
    if err != nil {
       return nil, err
    }
    return recordset, nil
}

```

================ UserService.go file ————————

```auto
func (us usersService) GetListOfUsers(ctx *gin.Context, teamId string) ([]models.Users, error) {
    var listOfUsers []models.Users
    records, err := us.aeroClient.QueryDataEquality(models.UserSet, "t_id", teamId)
    if err != nil {
        return nil, err
    }
    for res := range records.Results() {
        if res.Err != nil {
           return nil, res.Err
        } else {
            jsonStr, err := json.Marshal(res.Record.Bins)
            if err != nil {
                return nil, err
            }
            var tempUser models.Users
            if err := json.Unmarshal(jsonStr, &tempUser); err != nil {
                continue
            }
	    listOfUsers = append(listOfUsers, tempUser)
        }
    }
    return listOfUsers, nil
}

```

---

<div class="post-metadata">

**Author:** ![meher](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.aerospike.com/meher/32/1644_2.png) [@meher](https://discuss.aerospike.com/u/meher)\
**Post date:** [August 1, 2023, 6:23pm UTC](https://discuss.aerospike.com/t/how-to-write-test-case-for-a-function-which-has-aerospike-recordset-as-a-return-value/10362/2 "2023-08-01T18:23:02Z")

</div>

Seems this is cross posted on Stackoverflow: [How to create Unit test cases for “GetListOfUsers()” function of “UserService.go“ file. Facing issue in creating dummy aerospike.Recordset object - Stack Overflow](https://stackoverflow.com/questions/76759716/how-to-create-unit-test-cases-for-getlistofusers-function-of-userservice-go)

---

<div class="post-metadata">

**Author:** ![Khosrow\_Afroozeh](https://avatars.discourse-cdn.com/v4/letter/k/c6cbf5/32.png) [@Khosrow\_Afroozeh](https://discuss.aerospike.com/u/Khosrow_Afroozeh)\
**Post date:** [August 2, 2023, 5:26pm UTC](https://discuss.aerospike.com/t/how-to-write-test-case-for-a-function-which-has-aerospike-recordset-as-a-return-value/10362/3 "2023-08-02T17:26:34Z")

</div>

The easiest way is to mock the `Recordset` itself. Since interfaces are used for abstractions and they are implicit in Go, you can implement:

```go
type RecordsetIfc interface {
	Results() <-chan *aero.Result
}

// You can then implement a mock here
type MockRecordset struct{}

func (mrs *MockRecordset) Results() <-chan *aero.Result {
	res := make(chan *aero.Result)
	go func() {
		defer res.Close()
		for i := 0; i < 1000; i++ {
			res <- &aero.Result{
				Record: &aero.Record{
					Bins: aero.BinMap{ /*Whatever you need*/ },
				},
			}
		}
	}()

	return res
}

```

Use the `RecordsetIfc` as type in your functions, and in tests pass the mock instead of the real one.
