Python相当于PHP的strip_tags?
我有一个预先存在的界面......
public interface ISomeInterface
{
void SomeMethod();
}
Run Code Online (Sandbox Code Playgroud)
并且我使用mixin扩展了这个表面...
public static class SomeInterfaceExtensions
{
public static void AnotherMethod(this ISomeInterface someInterface)
{
// Implementation here
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个叫这个我要测试的课程...
public class Caller
{
private readonly ISomeInterface someInterface;
public Caller(ISomeInterface someInterface)
{
this.someInterface = someInterface;
}
public void Main()
{
someInterface.AnotherMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
和测试,我想模拟界面并验证对扩展方法的调用...
[Test]
public void Main_BasicCall_CallsAnotherMethod()
{
// Arrange
var someInterfaceMock = new Mock<ISomeInterface>();
someInterfaceMock.Setup(x => x.AnotherMethod()).Verifiable();
var caller = new Caller(someInterfaceMock.Object);
// Act
caller.Main();
// Assert
someInterfaceMock.Verify();
}
Run Code Online (Sandbox Code Playgroud)
然而,运行此测试会产生异常......
System.ArgumentException: …Run Code Online (Sandbox Code Playgroud) 在这里寻找一些实用的建议以及人们在类似情况下的任何经验.
我们使用BDD/TDD sytle方法来构建我们的软件(相当大/复杂的应用程序)最终结果是......从业务需求派生的行为规范(Given/When/Then style),反映这些的单元测试和反映的代码测试的要求.
但是,最近我们的测试部门已经开始运行集成测试,可以理解的是他们希望使用我们(已经通过的)业务逻辑代码来建立和拆除测试状态(而不是直接处理数据库),因为他们主要关注通过应用程序的UI进行测试,不想花一整天的时间来争论数据库.
问题是,某些实体存储库没有删除方法,因为还没有针对这些方法表达业务需求.许多人有存档/恢复/备份等(并且可能在待办事项上有删除待处理).
所以现在我们有一个测试部门.删除要求(但与业务用户故事冲突的要求)
所以......我的问题是......如果我要为测试部门专门添加方法......那么处理这些方法的最佳方法是什么.我知道这在"TDD乌托邦"中通常被认为是不好的做法,但实际上,你是如何处理这种冲突的?
我的第一个想法是使用命名...
void TestOnly_Delete(Guid id){}
Run Code Online (Sandbox Code Playgroud)
... ...属性
[TestOnly]
void Delete(Guid id){}
Run Code Online (Sandbox Code Playgroud)
......或编译器指令......
#if TESTBUILD
void Delete(Guid id){}
#endif
Run Code Online (Sandbox Code Playgroud)
因此,开发人员至少可以知道不要调用TestOnly方法,并且最多不会在生产版本中部署测试方法.
...或者只是作弊并添加一个用户故事来管理它;-)
任何经验或建议感激不尽?
提前致谢.
我有这个使用boost :: bind的简单代码:
#include <boost/bind.hpp>
#include <utility>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
std::vector<int> a;
std::vector<std::pair<bool,int> > b;
a.push_back(1);
a.push_back(2);
a.push_back(3);
std::transform(a.begin(), a.end(), std::back_inserter(b),
boost::bind(std::make_pair<bool, int>, false, _1));
}
Run Code Online (Sandbox Code Playgroud)
我在VS2010 RC中遇到了大量错误,例如:
Error 1 error C2780: 'boost::_bi::bind_t<_bi::dm_result<MT::* ,A1>::type,boost::_mfi::dm<M,T>,_bi::list_av_1<A1>::type> boost::bind(M T::* ,A1)' : expects 2 arguments - 3 provided c:\projects\testtuple\main.cpp 18
Error 2 error C2780: 'boost::_bi::bind_t<Rt2,boost::_mfi::cmf8<R,T,B1,B2,B3,B4,B5,B6,B7,B8>,_bi::list_av_9<A1,A2,A3,A4,A5,A6,A7,A8,A9>::type> boost::bind(boost::type<T>,R (__thiscall T::* )(B1,B2,B3,B4,B5,B6,B7,B8) const,A1,A2,A3,A4,A5,A6,A7,A8,A9)' : expects 11 arguments - 3 provided c:\projects\testtuple\main.cpp 18
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?如果这是编译器中的错误,我该如何解决它?
编辑:添加了整个测试用例.
澄清:代码在VS2008中编译.
我目前在J2SE应用程序中遇到JPATransactionManager的问题.
最新的请求未正确保存在数据库中(肯定是缓存问题).
这似乎是正常的,因为程序的退出似乎并没有"干净地"退出Spring应用程序上下文的所有Bean.
你知道在退出之前是否有一种干净关闭Spring上下文的方法?
先感谢您.
这个关于为什么Java中的常量按惯例大写的问题让我试着想一下反例.
我能想到至少一个(Double.NaN).还有其他人吗?
为了检查设备上的互联网访问,我使用requestRouteToHost函数,但它的第二个参数有整数类型 - 我必须放入什么?它是[1]函数的IP视图吗?我认为使用默认的android函数有更简单的方法.有人能告诉我吗?
[1] - >
public static Long ipToInt(String addr) {
String[] addrArray = addr.split("\\.");
long num = 0;
for (int i=0;i<addrArray.length;i++) {
int power = 3-i;
num += ((Integer.parseInt(addrArray[i])%256 * Math.pow(256,power)));
}
return num;
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
可能的方法:
使用推送:
my @list;
push @list, 'foo' if $foo;
push @list, 'bar' if $bar;
Run Code Online (Sandbox Code Playgroud)使用条件运算符:
my @list = (
$foo ? 'foo' : (),
$bar ? 'bar' : (),
);
Run Code Online (Sandbox Code Playgroud)my @list = (
('foo') x!! $foo,
('bar') x!! $bar,
);
Run Code Online (Sandbox Code Playgroud)哪一个更好,为什么?
我想将使用更大应用程序分发的模块拆分为单独的子模块,并保持从上游拉出的能力.
所以这比Detach子目录更复杂到单独的Git存储库.我不仅一次使用git-filter-branch,而且希望在我完成之后保持上拉变量的能力(而上游没有).
只需在我的重写历史未发现上游现在包括新提交完整的历史重新运行git的过滤分支是不是一种选择,因为有数百个模块为此我不得不这样做,提交的数目越来越接近100.000 .
我猜这涉及将历史限制为新的提交,重写那些然后在之前重写的提交之后添加它们,但我不确定如何做到这一点 - 也许有更好的方法.
如果分支和标签也可以被保留,那将是很好的,但这不是绝对必要的,如果它使事情变得复杂,我实际上宁愿失去那些.