不能在参数输出中模拟函数

时间:2019-09-05 20:28:58

标签: unit-testing go

我有以下界面:

type Datastore interface {
    Get(key interface{}, castTo interface{}) error
}

如您所见,我将castTo作为参数,而不是返回它。用法就像

var user *User
err:= Get("123-456", &user)

因此将类型传递给函数。原因是它具有以下实现:

func (ddb *DynamoDB) Get(key interface{}, castTo interface{}) error {

    ...

    return dynamodbattribute.UnmarshalMap(result.Item, &castTo)
}

在实现中,它使用aws dynamodb SDK中的功能,如下所示:

Source code

func UnmarshalMap(m map[string]*dynamodb.AttributeValue, out interface{}) error {
    return NewDecoder().Decode(&dynamodb.AttributeValue{M: m}, out)
}

接口变得非常通用。但是我现在面临的挑战是如何模拟界面。因为我正在为其编写单元测试的某些其他功能使用了Get接口。

func (r *repository) Get(id string) (*User, error) {
    var user *User
    if err := r.datastore.Get(id, &user); err != nil {
        return nil, err
    }

    ...

    return account, nil
}

在单元测试期间,我需要模拟datastore.Get()以返回一些假用户,然后将其与预期用户进行比较。

我正在使用conterfeiter进行模拟,它只能模拟return的结果。

有人遇到类似问题或知道如何解决吗?

0 个答案:

没有答案