我想用Mockito测试下面的(简化)代码.我不知道如何告诉Mockito第一次失败,然后第二次成功.
for(int i = 1; i < 3; i++) {
String ret = myMock.doTheCall();
if("Success".equals(ret)) {
log.write("success");
} else if ( i < 3 ) {
log.write("failed, but I'll try again. attempt: " + i);
} else {
throw new FailedThreeTimesException();
}
}
Run Code Online (Sandbox Code Playgroud)
我可以设置成功测试:
Mockito.when(myMock).doTheCall().thenReturn("Success");
Run Code Online (Sandbox Code Playgroud)
并且失败测试:
Mockito.when(myMock).doTheCall().thenReturn("you failed");
Run Code Online (Sandbox Code Playgroud)
但是,我如何测试如果它失败一次(或两次)然后成功,那很好吗?
我正在使用json-schema并且只想允许在此文件中声明的属性通过验证.例如,如果用户在其json对象中传递"name"属性,则该模式将失败,因为此处未将"name"列为属性.
是否有一些类似于"必需"的功能只允许列出的属性通过?
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Accounting Resource - Add Item",
"type": "object",
"properties": {
"itemNumber": {
"type":"string",
"minimum": 3
},
"title": {
"type":"string",
"minimum": 5
},
"description": {
"type":"string",
"minimum": 5
}
},
"required": [
"itemNumber",
"title",
"description"
]
}
Run Code Online (Sandbox Code Playgroud)
}
我正在尝试确定一个点是否在多边形内.Polygon由Point对象数组定义.我可以很容易地弄清楚该点是否在多边形的有界框内,但我不知道如何判断它是否在实际多边形内.如果可能的话,我只想使用C#和WinForms.我宁愿不打电话给OpenGL或其他什么来做这个简单的任务.
这是我到目前为止的代码:
private void CalculateOuterBounds()
{
//m_aptVertices is a Point[] which holds the vertices of the polygon.
// and X/Y min/max are just ints
Xmin = Xmax = m_aptVertices[0].X;
Ymin = Ymax = m_aptVertices[0].Y;
foreach(Point pt in m_aptVertices)
{
if(Xmin > pt.X)
Xmin = pt.X;
if(Xmax < pt.X)
Xmax = pt.X;
if(Ymin > pt.Y)
Ymin = pt.Y;
if(Ymax < pt.Y)
Ymax = pt.Y;
}
}
public bool Contains(Point pt)
{
bool bContains = true; //obviously wrong at the moment :) …
Run Code Online (Sandbox Code Playgroud) 在Python中我可以写
def myMethod():
#some work to find the row and col
return (row, col)
row, col = myMethod()
mylist[row][col] # do work on this element
Run Code Online (Sandbox Code Playgroud)
但是在C#中,我发现自己在写作
int[] MyMethod()
{
// some work to find row and col
return new int[] { row, col }
}
int[] coords = MyMethod();
mylist[coords[0]][coords[1]] //do work on this element
Run Code Online (Sandbox Code Playgroud)
Pythonic方式显然更加清洁.有没有办法在C#中做到这一点?
代码非常自我解释.我预计当我创建a1
并b1
创建两个包含相同文本的不同字符串实例时.所以我a1 == b1
认为这是真的但是object.ReferenceEquals(a1,b1)
会是假的,但事实并非如此.为什么?
//make two seemingly different string instances
string a1 = "test";
string b1 = "test";
Console.WriteLine(object.ReferenceEquals(a1, b1)); // prints True. why?
//explicitly "recreating" b2
string a2 = "test";
string b2 = "tes";
b2 += "t";
Console.WriteLine(object.ReferenceEquals(a2, b2)); // prints False
//explicitly using new string constructor
string a3 = new string("test".ToCharArray());
string b3 = new string("test".ToCharArray());
Console.WriteLine(object.ReferenceEquals(a3, b3)); // prints False
Run Code Online (Sandbox Code Playgroud) 我看了一遍,但无法弄清楚这一点.你如何总结BigIntegers的列表?
Using System.Numerics;
Using System.Linq;
List<BigInteger> bigInts = new List<BigInteger>();
BigInteger sum = bigInts.Sum(); // doesn't work
BigInteger sum = bigInts.Sum<BigInteger>(); // doesn't work
BigInteger sum = bigInts.Sum(x => x); // doesn't work
Run Code Online (Sandbox Code Playgroud)
你必须这样做吗?
BigInteger sum = new BigInteger(0);
foreach(BigInteger bigint in bigInts)
sum += bigint;
Run Code Online (Sandbox Code Playgroud) 我对Python很陌生,所以如果这里的任何内容都很糟糕,请指出.
我有一个这个字典的对象:
traits = {'happy': 0, 'worker': 0, 'honest': 0}
Run Code Online (Sandbox Code Playgroud)
每个特征的值应该是1-10范围内的int,并且不应该允许添加新特征.我想要getter/setter所以我可以确保保留这些约束.以下是我现在制作getter和setter的方法:
def getTrait(self, key):
if key not in self.traits.keys():
raise KeyError
return traits[key]
def setTrait(self, key, value):
if key not in self.traits.keys():
raise KeyError
value = int(value)
if value < 1 or value > 10:
raise ValueError
traits[key] = value
Run Code Online (Sandbox Code Playgroud)
我读了这个网站有关的property()
方法.但我没有看到一种简单的方法来利用它来获取/设置字典中的值.有一个更好的方法吗?理想情况下,我希望使用这个对象obj.traits['happy'] = 14
,这将调用我的setter方法并抛出一个ValueError,因为14超过10.
这纯粹是出于我自己的知识,如果我要编写我将使用的代码.Max()
.
起初认为.Max()
只需要通过一次通过numbers
来找到最大值,而第二种方法必须对可枚举的整个事物进行排序然后找到第一种.所以这是O(n)
VS O(n lg n)
.但后来我想也许它知道它只需要最高,只是抓住它.
问题: LINQ和/或编译器是否足够智能,以确定它不需要对整个可枚举进行排序,并将代码缩小到与.Max()基本相同的位置?找到可量化的方法吗?
IEnumerable<int> numbers = Enumerable.Range(1, 1000);
int max = numbers.Max();
int max2 = numbers.OrderByDescending(x => x).First();
Run Code Online (Sandbox Code Playgroud) 在Eclipse中你可以点击Ctrl+ J来使用增量查找,这很棒.但是,如果你从页面的一半开始,并尝试在上半部分找到一些东西,它将找不到它,因为它没有环绕,它停在页面的底部.所以我经常最终跳到页面顶部,只是为了增量找到中间.
有没有办法强制增量查找环绕页面底部?
注意:我意识到还有Ctrl+ Shift+ J来执行反向增量查找,但这有相同的限制.
我正在做一些涉及堆的家庭作业,我理解它们的结构.堆必须让每个节点满足堆属性,
max-heap属性是除了根之外的每个节点,Heap [Parent(i)]> = Heap [i]
因此,在每个节点处,较高节点具有较高数量,较低节点具有较低数量.我理解这一点.但我看不到使用Heap,只是简单地获得列表中最高的n个数字.我没有看到一种简单的方法来搜索特定值并返回节点,或者搜索n个最小数字(在最大堆中).两者在二叉搜索树中相对容易.
你为什么不只使用一个简单的二叉搜索树?或者更好的是,平衡的二叉搜索树?
编辑:我应该注意,这不是寻找家庭作业问题的答案.实际的作业问题是为insert()和extractMax()函数编写parallel-p-heap的伪代码.我已经回答了他们.他们让我意识到我并不真正了解Heaps.