如何解决当我 Moq Confluent.Kafka.WatermarkOffsets 时无法设置值
我在模拟 @override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
slivers: [
SliverAppBar(
primary: true,pinned: false,backgroundColor: Colors.white,expandedHeight: MediaQuery.of(context).size.height * 0.45,flexibleSpace: FlexibleSpaceBar(
collapseMode: CollapseMode.pin,background: Container(
decoration: Boxdecoration(border: Border.all(color: Colors.green)),child: Stack(
children: [
Container(
decoration: Boxdecoration(
color: Colors.black,image: decorationImage(
fit: BoxFit.cover,colorFilter: new ColorFilter.mode(Colors.grey.withOpacity(0.5),BlendMode.dstATop),alignment: Alignment.topCenter,image: NetworkImage(
"https://m.media-amazon.com/images/M/MV5BNDg3MmI1ZDYtMDZjYi00ZWRlLTk4NzEtZjY4Y2U0NjE5YmRiXkEyXkFqcGdeQXVyNzAxMjE1NDg@._V1_UY1200_CR92,630,1200_AL_.jpg"),),Align(
alignment: Alignment.bottomCenter,child: Container(
height: 100,width: MediaQuery.of(context).size.width,padding: EdgeInsets.symmetric(horizontal: 30,vertical: 20),decoration: Boxdecoration(
color: Colors.white,borderRadius: BorderRadius.only(
topLeft: Radius.circular(30),topRight: Radius.circular(30),child: Column(
crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [
Text(
"Gangs of New York",style: TextStyle(fontSize: 17,fontWeight: FontWeight.w400),Row(
children: [
Container(
decoration: Shapedecoration(
shape: StadiumBorder(),color: Colors.grey[400],child: Padding(
padding: const EdgeInsets.all(6),child: Text("Action"),SizedBox(width: 5),Container(
decoration: Shapedecoration(
shape: StadiumBorder(),child: Text("etc"),)
],)
],Align(
alignment: Alignment.center,child: Icon(Icons.play_circle_outline,color: Colors.white,size: 50),)
],SliverToBoxAdapter(
child: Container(
height: 700,decoration: Boxdecoration(
color: Colors.white,child: Center(
child: Text("body"),],);
}
的 Moq
测试中有这个 .Net
:
Confluent.Kafka.WatermarkOffsets
在我的一项测试中,我想设置一个高值和低值,因此尝试了以下操作:
我尝试了 Mock<WatermarkOffsets> _mockWatermarkOffsets = new Mock<WatermarkOffsets>();
和 _mockWatermarkOffsets.Object.Low = 1
,但似乎无法设置:
获取主题/分区中最早消息的偏移量。如果没有消息写入主题,则低水印偏移设置为 0。如果有一条消息写入分区(偏移为 0),低水印也将为 0。
CS0200:属性或索引器不能分配给“--”它是只读的
有什么办法可以做到这一点吗?
解决方法
要模拟属性 getter,您需要在模拟对象中使用 Setup
/SetupGet
方法:
_mockWatermarkOffsets.SetupGet(m => m.Low).Returns(1); // Preferable,to express your intent
_mockWatermarkOffsets.Setup(m => m.Low).Returns(1);
但是,您不能模拟 WatermarkOffsets.Low
,因为它没有标记为 virtual
,因此 Moq
不能覆盖它。
另一件妨碍您模拟的事情是 WatermarkOffsets
不包含无参数构造函数。一种解决方法是使用以下(丑陋的)构造来构建您的模拟:
var parameters = new object[] { new Offset(1),new Offset(10) };
var mock = new Mock<WatermarkOffsets>(parameters);
我的建议是,您最好的选择是简单地使用 WatermarkOffsets
实例,如 Riwen
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。