小编jb.*_*jb.的帖子

模拟第一次调用失败,第二次调用成功

我想用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)

但是,我如何测试如果它失败一次(或两次)然后成功,那很好吗?

java mockito

101
推荐指数
5
解决办法
6万
查看次数

仅允许在JSON模式中声明的属性

我正在使用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)

}

json jsonschema

62
推荐指数
3
解决办法
2万
查看次数

C#指向多边形

我正在尝试确定一个点是否在多边形内.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)

.net c# algorithm

35
推荐指数
7
解决办法
6万
查看次数

C#中的元组和解包分配支持?

在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#中做到这一点?

c# tuples decomposition iterable-unpacking

19
推荐指数
3
解决办法
1万
查看次数

两个不同的"字符串"是同一个对象实例?

代码非常自我解释.我预计当我创建a1b1创建两个包含相同文本的不同字符串实例时.所以我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)

c# string equality reference

19
推荐指数
2
解决办法
3619
查看次数

总结一下BigIntegers的列表

我看了一遍,但无法弄清楚这一点.你如何总结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)

c# syntax sum biginteger

16
推荐指数
2
解决办法
2829
查看次数

正确使用字典值的getter/setter

我对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.

python getter-setter

12
推荐指数
1
解决办法
9234
查看次数

.Max()vs OrderByDescending().First()

这纯粹是出于我自己的知识,如果我要编写我将使用的代码.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)

c# linq compiler-optimization

10
推荐指数
4
解决办法
3296
查看次数

使Eclipse的Incremental Find环绕页面末尾

在Eclipse中你可以点击Ctrl+ J来使用增量查找,这很棒.但是,如果你从页面的一半开始,并尝试在上半部分找到一些东西,它将找不到它,因为它没有环绕,它停在页面的底部.所以我经常最终跳到页面顶部,只是为了增量找到中间.

有没有办法强制增量查找环绕页面底部?

注意:我意识到还有Ctrl+ Shift+ J来执行反向增量查找,但这有相同的限制.

eclipse search

10
推荐指数
1
解决办法
3445
查看次数

Heap数据结构的用途是什么?

我正在做一些涉及堆的家庭作业,我理解它们的结构.堆必须让每个节点满足堆属性,

max-heap属性是除了根之外的每个节点,Heap [Parent(i)]> = Heap [i]

因此,在每个节点处,较高节点具有较高数量,较低节点具有较低数量.我理解这一点.但我看不到使用Heap,只是简单地获得列表中最高的n个数字.我没有看到一种简单的方法来搜索特定值并返回节点,或者搜索n个最小数字(在最大堆中).两者在二叉搜索树中相对容易.

你为什么不只使用一个简单的二叉搜索树?或者更好的是,平衡的二叉搜索树?

编辑:我应该注意,这不是寻找家庭作业问题的答案.实际的作业问题是为insert()和extractMax()函数编写parallel-p-heap的伪代码.我已经回答了他们.他们让我意识到我并不真正了解Heaps.

heap data-structures

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