为什么这个项目不再维护?我喜欢这个应用程序,但不更新它似乎是对所有.Net开发人员的犯罪.考虑到未来发布的可能性,我希望添加几个项目.
任何人都可以分享我不知道的东西吗?
我为各种平台编写应用程序,但主要是OS X和Windows.在这两方面,我受到了测试驱动开发(TDD),SOLID等最近趋势的影响.我发现大多数都是很好的建议.我发现如果我有很好的测试覆盖率,我更有可能根据需要进行重构,因为我更有信心我会在测试中发现重构的任何副作用.
无论如何,所有这一切都引出了我的问题:"经理"单身总是一个坏主意吗?我正在编写一个Cocoa应用程序,它必须处理队列中的大量QuickTime文件.应用程序中只能有一个队列,并且应该可以访问应用程序的多个部分,以便它们可以将项目添加到队列中.我发现最简单的方法是使用单例.现在,我已经注意以可测试的方式编写这个单例,因此TDD不是问题.
在这种情况下,我会用什么替代单身人士?还有哪些其他设计模式可以进行单元测试?(请注意,此问题应视为与语言无关.这是一般的OO和TDD问题.)
我在一个由两个前端开发人员组成的团队中,在一个基于Web的后期创业项目上工作.
该网站运行良好,但代码有很大的改进空间,因为代码非常混乱和杂乱无章.
我想通过编写测试和仔细重构来逐步清理,以避免破坏任何东西.(使用"有效使用遗留代码"一书中的原则)
但是,我正在与之合作的开发人员正在进行许多高优先级的功能工作,而且我不想让他负担维护任务.很多时候他只是因为时间限制而编写凌乱的代码.
随着团队的成长,我担心如何管理不同的问题.
我想把团队分成两组:
我的目标是尽可能多地测试代码,同时仍然保持新功能开发的步伐.
这是否曾经尝试过?有什么想法吗?
我想找到ASP.Net MVC项目的最佳设置,以便在Visual Studio中获得最快的代码构建运行过程.
如何设置解决方案以实现接近零的二次构建时间以进行小的增量更改?
如果您有一个测试项目,并且依赖于解决方案中的其他项目,那么测试项目的构建仍将处理其他项目,即使它们没有更改.
我不认为它完全重建这些项目,但肯定是在处理它们.在进行TDD时,您需要接近零的构建时间来进行小的增量更改,而不是20-30秒的延迟.
目前我的方法是引用依赖项目的dll而不是引用项目本身,但这有副作用,要求我独立构建这些项目,如果我需要在那里进行更改,然后构建我的测试项目.
一个小技巧,如果您使用PostSharp,您可以添加条件编译符号SKIPPOSTSHARP,以避免在单元测试期间重建项目中的方面.如果为单元测试创建单独的构建配置,则此方法效果最佳.
这是我回到TDD的基础知识用于学习目的.
我最初实现Person.Surname为类型对象的字段(传递测试的最简单方法).
然后我添加了一个测试设置,Person.Surname指出返回值应该是一个字符串并设置Person.Surname=20.
我通过改变使用string而不是使用实现来"修复"测试object.由于静态类型检查,测试现在很长时间编译,所以我评论了它.
Person.Surname字段当前实现为字符串.如果我将字段的实现更改为对象,则我的测试都不会失败.
所以我无法在测试中留下我的意图.在这种情况下,有没有办法进行失败的测试?
更新:我同意Esko,实际上这不是你想要做的事情.从学习的角度来看,我试图提出的观点是,如果我(或其他人在以后的某个时间点)扩大我的字段的类型范围(比如从字符串到对象)我将不会直接单元测试失败.也许这毕竟不是一件坏事?
嘿,我第一次使用带轨道的TDD ......有趣的概念.绝对有用.也就是说,直到我来到这里.当我运行我的测试时,我得到:
1) User should build the full name correctly
Failure/Error: @u1.fullname.to_s.should be("#{@attr[:firstname]} #{@attr[:lastname]}")
expected Joe Smith, got "Joe Smith"
# ./spec/models/user_spec.rb:35:in `block (2 levels) in <top (required)>'
# /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/rspec-core-2.0.0.beta.18/lib/rspec/monkey/spork/test_framework/rspec.rb:4:in `run_tests'
# /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/run_strategy/forking.rb:13:in `block in run'
# /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/forker.rb:21:in `block in initialize'
# /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/forker.rb:18:in `fork'
# /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/forker.rb:18:in `initialize'
# /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/run_strategy/forking.rb:9:in `new'
# /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/run_strategy/forking.rb:9:in `run'
# /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/server.rb:47:in `run'
Run Code Online (Sandbox Code Playgroud)
测试的地方是:
it 'should build the full name correctly' do
@u1.fullname.should be("#{@attr[:firstname]} #{@attr[:lastname]}")
end
Run Code Online (Sandbox Code Playgroud)
并且支持代码是:
def fullname
"#{firstname} #{lastname}"
end
Run Code Online (Sandbox Code Playgroud)
显然这很有效,但引号是什么?我是否错过了令人头疼的事情?
我试图在我的控制器上测试更新操作的失败分支,但我在测试时遇到问题.这就是我所拥有的,它最后失败了
describe "PUT 'article/:id'" do
.
.
.
describe "with invalid params" do
it "should find the article and return the object" do
Article.stub(:find).with("1").and_return(@article)
end
it "should update the article with new attributes" do
Article.stub(:update_attributes).and_return(false)
end
it "should render the edit form" do
response.should render_template("edit")
end
end
end
Run Code Online (Sandbox Code Playgroud)
关于为什么最后一部分无法呈现模板的任何想法?
嗯,我有一个货币对象,允许我添加其他货币对象.我尝试assertEquals()在java中测试我的代码是否正常,但后来失败了.
我非常肯定我的代码是正确的(System.out.println返回正确的答案),我想我只是assertEquals以错误的方式使用.T_T
如果我想知道是否myObj1 == myObj2进行测试,我究竟能使用什么?
**in my test.java**
assertEquals(new Money(money1.getCurrency(),new Value(22,70)),money1.add(money2));
**in my money class**
public class Money {
Currency currency;
Value value;
//constructor for Money class
public Money(Currency currency, Value value) {
super();
this.currency = currency;
this.value = value;
}
public Currency getCurrency() {
return currency;
}
public void setCurrency(Currency currency) {
this.currency = currency;
}
//must have same currency
public Money add(Money moneyToBeAdded){
Money result = new Money(moneyToBeAdded.currency, new Value(0,0)); …Run Code Online (Sandbox Code Playgroud) 我在使用泛型创建类的新实例时遇到问题.我想要做的是拥有一个可以使用DBSet <>或FakeDBSet <>创建的数据库上下文.FakeDBSet将用于测试代码.我目前有一个完整的假数据文本,但它是一个浪费,因为唯一真正的区别是使用的DBSet.我已经研究过使用Activator.CreateInstance()而没有太多运气.
例:
public class Album {}
public class Artist {}
public class MusicStoreContext
{
public IDbSet<Album> Albums { get; set; }
public IDbSet<Artist> Artists { get; set; }
public MusicStoreContext(Type dbSetType)
{
Albums = new (dbSetType)<Album>;
Artists = new (dbSetType)<Artist>;
}
}
public class Startup
{
public Startup()
{
// Production code would do something like this:
MusicStoreContext context = new MusicStoreContext(typeof(DbSet<>));
// Test code would do something like this:
MusicStoreContext testContext = new MusicStoreContext(typeof(FakeDbSet<>));
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样的事情: …
tdd ×10
c# ×2
unit-testing ×2
agile ×1
asp.net-mvc ×1
assert ×1
bdd ×1
datacontext ×1
generics ×1
java ×1
legacy-code ×1
nunit ×1
rspec ×1
rspec2 ×1
singleton ×1