英文:
How to make the function suit the _test file?
问题
这是我的代码:
type Queue interface {
Push(key interface{})
Pop() interface{}
Contains(key interface{}) bool
Len() int
Keys() []interface{}
}
type QueueData struct {
size int
data []interface{}
}
func New(size int) *QueueData {
return &QueueData{
size: size,
}
}
func (q *QueueData) IsEmpty() bool {
return len(q.data) == 0
}
// Peek : 返回队列中的下一个元素
func (q *QueueData) Peek() (interface{}, error) {
if len(q.data) == 0 {
return 0, fmt.Errorf("队列为空")
}
return q.data[0], nil
}
// Queue : 将元素添加到队列中,并返回指向当前队列的指针
func (q *QueueData) Push(n interface{}) *QueueData {
if q.Len() < q.size {
q.data = append(q.data, n)
} else {
q.Pop()
q.Push(n)
}
return q
}
// Dequeue : 从队列中移除下一个元素并返回其值
//func (q *QueueFix) Pop() (interface{}, error) {
func (q *QueueData) Pop() interface{} {
if len(q.data) == 0 {
//return 0, fmt.Errorf("队列为空")
return 0
}
element := q.data[0]
q.data = q.data[1:]
//return element, nil
return element
}
func (q *QueueData) Len() int {
return len(q.data)
}
func (q *QueueData) Keys() []interface{} {
return q.data
}
func (q *QueueData) Contains(key interface{}) bool {
cont := false
for i := 0; i < q.Len(); i++ {
if q.data[i] == key {
cont = true
}
}
return cont
}
我的测试代码如下:
var testValues = []interface{}{
"lorem",
"ipsum",
1,
2,
3,
"jack",
"jill",
"felix",
"donking",
}
// TestPush 验证淘汰旧项目策略
func TestEvictPolicy(t *testing.T) {
size := 5
q := New(size)
for i, v := range testValues {
q.Push(v)
t.Log("当前队列: ", q.Keys())
// 验证
// 项目存在性
if !q.Contains(v) {
t.Errorf("策略: 新插入的 %v 必须存在", v)
}
if i < 5 && q.Len() != (i+1) {
t.Errorf("期望长度 %d,实际长度: %d", i+1, q.Len())
} else if i >= 5 && q.Len() != 5 {
t.Errorf("期望长度: %d,实际长度: %d", size, q.Len())
}
}
}
// TestPop 验证弹出项目策略
func TestPop(t *testing.T) {
size := 5
q := New(size)
for _, v := range testValues {
q.Push(v)
}
for q.Len() > 0 {
t.Log("当前队列: ", q.Keys())
v := q.Pop()
// 验证
expect := testValues[len(testValues)-(q.Len()+1)]
if v != expect {
t.Errorf("期望值 %v,实际值 %v", expect, v)
}
}
}
测试返回了以下错误:
.\Queue_test.go:60:4: 错误调用可能有格式化指令 %v
FAIL /C/Users/richa/go/src [构建失败]
我不明白如何从_test.go文件中创建代码。需要解释如何创建_test.go文件。只需给出一些关于此测试的参考资料,例如当我添加EvictPolicy函数时,它说未声明...
英文:
Here was my code
type Queue interface {
Push(key interface{})
Pop() interface{}
Contains(key interface{}) bool
Len() int
Keys() []interface{}
}
type QueueData struct {
size int
data []interface{}
}
func New(size int) *QueueData {
return &QueueData{
size: size,
}
}
func (q *QueueData) IsEmpty() bool {
return len(q.data) == 0
}
// Peek : returns the next element in the queue
func (q *QueueData) Peek() (interface{}, error) {
if len(q.data) == 0 {
return 0, fmt.Errorf("Queue is empty")
}
return q.data[0], nil
}
// Queue : adds an element onto the queue and returns an pointer to the current queue
func (q *QueueData) Push(n interface{}) *QueueData {
if q.Len() < q.size {
q.data = append(q.data, n)
} else {
q.Pop()
q.Push(n)
}
return q
}
// Dequeue : removes the next element from the queue and returns its value
//func (q *QueueFix) Pop() (interface{}, error) {
func (q *QueueData) Pop() interface{} {
if len(q.data) == 0 {
//return 0, fmt.Errorf("Queue is empty")
return 0
}
element := q.data[0]
q.data = q.data[1:]
//return element, nil
return element
}
func (q *QueueData) Len() int {
return len(q.data)
}
func (q *QueueData) Keys() []interface{} {
return q.data
}
func (q *QueueData) Contains(key interface{}) bool {
cont := false
for i := 0; i < q.Len(); i++ {
if q.data[i] == key {
cont = true
}
}
return cont
}
My Test is look like this...
var testValues = []interface{}{
"lorem",
"ipsum",
1,
2,
3,
"jack",
"jill",
"felix",
"donking",
}
// TestPush validate evict old item policy
func TestEvictPolicy(t *testing.T) {
size := 5
q := New(size)
for i, v := range testValues {
q.Push(v)
t.Log("current: ", q.Keys())
// validate
// item existence
if !q.Contains(v) {
t.Errorf("policy: newly inserted %v must be exists", v)
}
if i < 5 && q.Len() != (i+1) {
t.Errorf("expected length %d but actual: %d", i+1, q.Len())
} else if i >= 5 && q.Len() != 5 {
t.Errorf("expexted length: %d but actual: %d", size, q.Len())
}
}
}
// TestPop validate pop item policy
func TestPop(t *testing.T) {
size := 5
q := New(size)
for _, v := range testValues {
q.Push(v)
}
for q.Len() > 0 {
t.Log("current: ", q.Keys())
v := q.Pop()
// validate
expect := testValues[len(testValues)-(q.Len()+1)]
if v != expect {
t.Error("expected %v but recevied %v", expect, v)
}
}
}
The test returned
> .\Queue_test.go:60:4: Error call has possible formatting directive %v
> FAIL /C/Users/richa/go/src [build failed]
I didn't i understand how to make an code from _test.go file. Need an explain how to make the _test.go aswell. Just give some reference for this testing. like when i add EvictPolicy Function, itsay undeclared...
答案1
得分: 2
你看到的错误信息是这样的:
Queue_test.go:60:4: Error call has possible formatting directive %v FAIL
看起来是指的这一行代码:
t.Error("expected %v but recevied %v", expect, v)
在这一行中,你调用了t.Error
来打印错误信息,并将expect
和v
变量格式化为错误字符串。但是,t.Error
并不会对额外的参数进行格式化,它只是将它们打印出来。
你应该像对其他错误信息一样调用t.Errorf
。
英文:
The error you are seeing
Queue_test.go:60:4: Error call has possible formatting directive %v FAIL
Looks to be referring to this line
t.Error("expected %v but recevied %v", expect, v)
On this line you called t.Error
to print the error message and format the expect
and v
vars into the error string. But, t.Error
does not format the additional arguments. It just prints them.
You should call t.Errorf
like you did for your other error messages.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论