在dart中的函数中对函数进行存根/模拟/监视

在dart中的函数中对函数进行存根/模拟/监视,dart,Dart,在过去的几天里,我一直在使用Dart进行一些单元测试。我在函数中测试一个函数时看到了一些奇怪的功能,我会模拟一个函数来返回一些东西,但它不会改变前面的函数。代码和输出如下所示: 主要类别: 创建的测试: 输出: 16 十六, 为什么输出不正确 16 110 即使在刺杀了间谍,使其无法返回100 Spy在mockito中不受欢迎。 相反,建议您对存根的一部分进行手工编码(或使用代码生成技术)(请参阅) 我不确定你想做什么,但这是我想到的: import 'package:mockito/mocki

在过去的几天里,我一直在使用Dart进行一些单元测试。我在函数中测试一个函数时看到了一些奇怪的功能,我会模拟一个函数来返回一些东西,但它不会改变前面的函数。代码和输出如下所示:

主要类别: 创建的测试: 输出: 16 十六,

为什么输出不正确 16 110
即使在刺杀了间谍,使其无法返回100

Spy在mockito中不受欢迎。 相反,建议您对存根的一部分进行手工编码(或使用代码生成技术)(请参阅)

我不确定你想做什么,但这是我想到的:

import 'package:mockito/mockito.dart';
import 'package:test/test.dart';

abstract class CalcInterface {
  int sum(int i, int z);
  int addOne(int i);
}

abstract class BaseCalc implements CalcInterface {
  int sum(int i, int z) {
    return addOne(i) + z;
  }
}

class Calc extends Object with BaseCalc implements CalcInterface {
  int sum(int i, int z) {
    return addOne(i) + z;
  }

  int addOne(int i) {
    return i + 1;
  }
}

class MockCalc extends Mock with BaseCalc implements CalcInterface {}

main() {
  test("hello", () {
    var mocked = new MockCalc();
    when(mocked.addOne(5)).thenReturn(100);

    expect(mocked.sum(5, 10), 110);

    verify(mocked.addOne(5)).called(1);
  });
}

尽管间谍活动不受欢迎。有没有办法通过间谍存根获得与上述相同的结果?否则,您是否建议创建接口和抽象类来测试测试类中的功能?
test("hello", () async{
         var ToBeTestedSpy = spy(new ToBeTested(), new ToBeTested(param1,param 2));
         print(ToBeTestedSpy.sum(5, 10));
         when(ToBeTestedSpy.addOne(5)).thenReturn(100);
         print(ToBeTestedSpy.sum(5, 10));
  });
import 'package:mockito/mockito.dart';
import 'package:test/test.dart';

abstract class CalcInterface {
  int sum(int i, int z);
  int addOne(int i);
}

abstract class BaseCalc implements CalcInterface {
  int sum(int i, int z) {
    return addOne(i) + z;
  }
}

class Calc extends Object with BaseCalc implements CalcInterface {
  int sum(int i, int z) {
    return addOne(i) + z;
  }

  int addOne(int i) {
    return i + 1;
  }
}

class MockCalc extends Mock with BaseCalc implements CalcInterface {}

main() {
  test("hello", () {
    var mocked = new MockCalc();
    when(mocked.addOne(5)).thenReturn(100);

    expect(mocked.sum(5, 10), 110);

    verify(mocked.addOne(5)).called(1);
  });
}