我基本上都在努力教自己如何编码,我想遵循良好的做法.单元测试有明显的好处.在单元测试方面也有很多狂热,我更喜欢更实用的编码和生活方法.作为上下文,我正在编写我的第一个"真实"应用程序,它是使用asp.net MVC的无处不在的博客引擎.我通过自己的调整松散地遵循MVC店面架构.因此,这是我第一次真正涉足嘲弄对象.我将把代码示例放在问题的最后.
我很感激任何洞察力或外部资源,我可以用它来增加我对测试和模拟基础的理解.我在网上找到的资源通常是针对模拟的"方式",我需要更多地了解模拟的地点,原因和时间.如果这不是提出这个问题的最佳地点,请指出一个更好的地方.
我试图理解我从以下测试中获得的价值.UserService依赖于IUserRepository.服务层的价值是将逻辑与数据存储分开,但在这种情况下,大多数UserService调用只是直接传递给IUserRepository.没有太多实际逻辑需要测试的事实也可能是我担忧的根源.我有以下问题.
我正在使用NUnit和Rhino.Mocks,但我应该很清楚我要完成的事情.
[SetUp]
public void Setup()
{
userRepo = MockRepository.GenerateMock<IUserRepository>();
userSvc = new UserService(userRepo);
theUser = new User
{
ID = null,
UserName = "http://joe.myopenid.com",
EmailAddress = "joe@joeblow.com",
DisplayName = "Joe Blow",
Website = "http://joeblow.com"
};
}
[Test]
public void UserService_can_create_a_new_user()
{
// Arrange
userRepo.Expect(repo => repo.CreateUser(theUser)).Return(true);
// Act
bool result = userSvc.CreateUser(theUser);
// Assert
userRepo.VerifyAllExpectations();
Assert.That(result, Is.True,
"UserService.CreateUser(user) failed when it should have succeeded");
}
[Test]
public void UserService_can_not_create_an_existing_user()
{
// Arrange
userRepo.Stub(repo …Run Code Online (Sandbox Code Playgroud) 我试图围绕反射,所以我决定将插件功能添加到我正在编写的程序中.理解一个概念的唯一方法是让你的手指变脏并编写代码,所以我选择了创建一个由IPlugin和IHost接口组成的简单接口库,一个实现IPlugin的类的插件实现库,以及一个简单的接口库.实例化IHost实现类的控制台项目,该类实现了插件对象的简单工作.
使用反射,我想迭代我的插件实现dll中包含的类型并创建类型的实例.我能够使用此代码成功实例化类,但我无法将创建的对象强制转换为接口.
我尝试了这段代码,但我无法像我预期的那样投射对象o.我使用调试器完成了整个过程,并调用了正确的构造函数.快速查看对象o向我展示了它具有我期望在实现类中看到的字段和属性.
loop through assemblies
loop through types in assembly
// Filter out unwanted types
if (!type.IsClass || type.IsNotPublic || type.IsAbstract )
continue;
// This successfully created the right object
object o = Activator.CreateInstance(type);
// This threw an Invalid Cast Exception or returned null for an "as" cast
// even though the object implemented IPlugin
IPlugin i = (IPlugin) o;
Run Code Online (Sandbox Code Playgroud)
我使用这个代码.
using System.Runtime.Remoting;
ObjectHandle oh = Activator.CreateInstance(assembly.FullName, type.FullName);
// This worked as I intended
IPlugin i = (IPlugin) oh.Unwrap(); …Run Code Online (Sandbox Code Playgroud) 我是一名学习软件开发的学生,我觉得编程一般来说太过广泛,无法尝试了解所有内容.要精通,你必须决定哪些领域要集中你的学习和理解.某些技能组合相互协作,如数据驱动的Web开发和SQL体验.但是,世界上所有的win32 API体验可能都不会直接适用于linux开发.这让我相信,作为一名初级程序员,在对软件开发的基本原理有一般了解之后,我应该开始决定我想要专攻的地方.
这是一个多部分的问题:
public class MyClass
{
public int Age;
public int ID;
}
public void MyMethod()
{
MyClass m = new MyClass();
int newID;
}
Run Code Online (Sandbox Code Playgroud)
据我了解,以下是真实的:
这是我的问题:
从逻辑上讲,我认为类中的值类型会在堆中,但我不确定是否必须将它们装入盒中.
编辑:
建议阅读本主题:
10美元,曼宁正在以"NHibernate in Action"为特色. NHibernate In Action于2009年2月发布,用于NHibernate的V1.2.目前,NHibernate达到V2.1.关于V1.2的书是否足以适用于当前版本的NHibernate.我不想浪费我的时间和金钱在一本关于弃用或不相关的功能的书上.
我是一个完整的NHibernate noob,但我对ORM的一般概念并不陌生.
更新:
我确实买了这本书,从我读过的少量书中,V2.x系列在本书发布时处于测试阶段.本书的作者确实指出了1.x和2.x之间的一些配置差异.从我到目前为止所读到的内容,我向任何想要一本关于NHibernate的书的人推荐这本书.