标签: table-driven

测试地图的等效性

我有一个像这样的表驱动测试用例:

func CountWords(s string) map[string]int

func TestCountWords(t *testing.T) {
  var tests = []struct {
    input string
    want map[string]int
  }{
    {"foo", map[string]int{"foo":1}},
    {"foo bar foo", map[string]int{"foo":2,"bar":1}},
  }
  for i, c := range tests {
    got := CountWords(c.input)
    // TODO test whether c.want == got
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以检查长度是否相同,并编写一个循环来检查每个键值对是否相同.但是当我想将它用于另一种类型的地图时(例如map[string]string),我必须再次编写此检查.

我最终做的是,我将地图转换为字符串并比较字符串:

func checkAsStrings(a,b interface{}) bool {
  return fmt.Sprintf("%v", a) != fmt.Sprintf("%v", b) 
}

//...
if checkAsStrings(got, c.want) {
  t.Errorf("Case #%v: Wanted: %v, got: %v", i, c.want, got)
}
Run Code Online (Sandbox Code Playgroud)

这假设等效映射的字符串表示是相同的,在这种情况下似乎是正确的(如果键是相同的,那么它们散列到相同的值,因此它们的顺序将是相同的).有一个更好的方法吗?在表驱动测试中比较两个映射的惯用方法是什么?

testing maps table-driven go equivalence

70
推荐指数
6
解决办法
4万
查看次数

11
推荐指数
2
解决办法
1万
查看次数

直接编码与表驱动词法分析器?

我是编译器构建世界的新手,我想知道直接编码与表驱动词法分析器有什么区别?

如果可能,请使用简单的源代码示例.

谢谢.

编辑:

在" 编译工程"一书中,作者将词法分为三(3)种类型:表驱动,直接编码和手动编码.

compiler-construction table-driven lexer

8
推荐指数
1
解决办法
3787
查看次数

如何使用决策表来帮助您的应用程序

我前段时间了解了决策树和决策表.我觉得决策表可以帮助处理有条件的If-Then-Else语句.特别是,我觉得决策表没有副作用,例如,如果你没有注意到你还需要一个"else if"语句.

但我不确定如何实现它.阵列?数据库表?现在有人甚至在他们的代码中使用决策表吗?

table-driven

6
推荐指数
1
解决办法
5560
查看次数

表驱动测试与 testify 模拟

是否有任何使用 testify 编写干净的表驱动测试的示例。输入和预期输出的表驱动测试效果很好,但必须测试依赖项的输出似乎真的很难做到。

下面的示例使用一个模拟接口,并要求我编写一个全新的测试函数来验证被测函数是否正确处理依赖项错误。我只是在寻找建议,使使用 testify 模拟包编写单元测试更加简化。

package packageone

import (
    "errors"
    "musings/packageone/mocks"
    "testing"
)
//Regular Table driven test
func TestTstruct_DoSomething(t *testing.T) {
    testObj := new(mocks.Dinterface)

    passes := []struct {
        Input  int
        Output int
    }{{0, 0}, {1, 1}, {2, 4}, {100, 10000}}

    for _, i := range passes {
        testObj.On("DoSomethingWithD", i.Input).Return(i.Output, nil)
    }

    type fields struct {
        DC Dinterface
    }
    type args struct {
        i int
    }
    tests := []struct {
        name    string
        fields  fields
        args    args
        wantRes int
        wantErr bool …
Run Code Online (Sandbox Code Playgroud)

testing mocking table-driven go testify

4
推荐指数
1
解决办法
2400
查看次数