我正在尝试测试一个使用带有许多静态方法的计算器类的类.我以类似的方式成功地嘲笑了另一个班级,但是这个班级更加顽固.
似乎如果mocked方法包含对传入的参数之一的方法调用,则静态方法不会被模拟(并且测试中断).删除内部呼叫显然不是一种选择.有什么明显的东西我在这里不见了吗?
这是一个浓缩版本,行为方式相同......
public class SmallCalculator {
public static int getLength(String string){
int length = 0;
//length = string.length(); // Uncomment this line and the mocking no longer works...
return length;
}
}
Run Code Online (Sandbox Code Playgroud)
这是测试......
import static org.junit.Assert.assertEquals;
import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.any;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.solveit.aps.transport.model.impl.SmallCalculator;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ SmallCalculator.class})
public class SmallTester {
@Test
public void smallTest(){
PowerMockito.spy(SmallCalculator.class);
given(SmallCalculator.getLength(any(String.class))).willReturn(5);
assertEquals(5, SmallCalculator.getLength(""));
}
}
Run Code Online (Sandbox Code Playgroud)
似乎对这个问题存在一些困惑,所以我设计了一个更"现实"的例子.这个添加了一个间接级别,因此我似乎没有直接测试模拟方法.SmallCalculator类保持不变:
public class BigCalculator {
public int getLength(){ …
Run Code Online (Sandbox Code Playgroud) 我试图通过绘制皮马印第安人糖尿病数据集的概率密度分布来分析其特征(点击链接获取数据集)。我尚未删除无效的 0 数据,因此绘图有时会在最左侧显示偏差。在大多数情况下,分布看起来很准确:
我对 DiabetesPedigree 的图的外观有疑问,该图显示的概率超过 1.0(对于 x ~ 0.1 和 0.5 之间)。据我了解,组合概率应等于 1.0。
我已经隔离了 DiatebesPedigree 图的代码,但通过更改值也可以用于其他图dataset_index
:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde
dataset_index = 6
feature_name = "DiabetesPedigree"
filename = 'pima-indians-diabetes.data.csv'
data = pd.read_csv(filename)
feature_data = data.ix[:, dataset_index]
graph_min = feature_data.min()
graph_max = feature_data.max()
density = gaussian_kde(feature_data)
density.covariance_factor = lambda : .25
density._compute_covariance()
xs = np.arange(graph_min, graph_max, (graph_max - graph_min)/200)
ys = density(xs)
plt.xlim(graph_min, graph_max) …
Run Code Online (Sandbox Code Playgroud) 我以为我理解C语言中的赋值操作,但我正在尝试学习一些图形编程,并且我遇到了这个初始化语句让我感到困惑:
/* request auto detection */
int gdriver = DETECT, gmode, errorcode
Run Code Online (Sandbox Code Playgroud)
我使用元素编译了一个小的工作程序,结果似乎是赋值和声明的组合.RHS上的第一个变量分配给LHS变量,其余变量被声明(但未初始化)为LHS变量的类型......
#include <stdio.h>
int main(){
int a = 0; // Comment out this line and things break
int d = a, b, c;
printf("%d %d %d %d", a, b, c, d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么你会使用这样的一行似乎一起执行两个不相关的行为?