我不是MVVM模式的常规,这基本上是我第一次玩它.
我以前做的("普通"WPF)是用业务层创建我的视图,也许是数据层(通常包含我的服务或实体框架创建的实体).
现在经过一些玩弄我从MVVM Light创建了一个标准模板,并做到了这一点:
定位:
public class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IUserService, DesignUserService>();
}
else
{
SimpleIoc.Default.Register<IUserService, IUserService>();
}
SimpleIoc.Default.Register<LoginViewModel>();
}
public LoginViewModel Login
{
get
{
return ServiceLocator.Current.GetInstance<LoginViewModel>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
登录ViewModel:
public class LoginViewModel : ViewModelBase
{
private readonly IUserService _userService;
public RelayCommand<Object> LoginCommand
{
get
{
return new RelayCommand<Object>(Login);
}
}
private string _userName;
public String UserName
{
get { return _userName; }
set
{
if (value == _userName)
return; …Run Code Online (Sandbox Code Playgroud) 以下功能从用户获得输入.我需要使用测试这个功能Unit Testing.任何人都可以告诉我如何测试这种动态需要用户输入的功能.谢谢
喜欢boundary value analysis......
numberOfCommands 应该 (0 <= n <= 100)
public static int Get_Commands()
{
do
{
string noOfCommands = Console.ReadLine().Trim();
numberOfCommands = int.Parse(noOfCommands);
}
while (numberOfCommands <= 0 || numberOfCommands >= 100);
return numberOfCommands;
}
Run Code Online (Sandbox Code Playgroud)
以编程方式提示将是非常有帮助的!
假设我有一个XmlDocument我生成的InnerXml,看起来像这样:
<ORM_O01>
<MSH>
<MSH.9>
<MSG.2>O01</MSG.2>
</MSH.9>
<MSH.6>
<HD.1>13702</HD.1>
</MSH.6>
</MSH>
<ORM_O01.PATIENT>
<PID>
<PID.18>
<CX.1>SecondTestFin</CX.1>
</PID.18>
<PID.3>
<CX.1>108</CX.1>
</PID.3>
</PID>
</ORM_O01.PATIENT>
</ORM_O01>
Run Code Online (Sandbox Code Playgroud)
如您所见,节点<PID.18>在节点之前<PID.3>.(<MSH.9>也在之前<MSH.6>.)
重构我的一代将导致我干净的代码变得非常混乱.
有没有办法对节点进行排序,以便它排序alpha直到它到达最后一个句点然后排序数字(如果最后的值是数字)?
通过"数字排序"我的意思是它将查看整数而不是char的char.(所以18> 3).
使用FakeItEasy,如何检查我的对象的方法是否在同一个对象上调用另一个方法?
考试:
[TestMethod]
public void EatBanana_CallsWillEat()
{
var banana = new Banana();
var myMonkey = new Monkey();
myMonkey.EatBanana(banana);
//this throws an ArgumentException, because myMonkey is a real instance, not a fake
A.CallTo(() => myMonkey.WillEat(banana)
.MustHaveHappened();
}
Run Code Online (Sandbox Code Playgroud)
班级:
public class MyMonkey {
private readonly IMonkeyRepo _monkeyRepo;
public MyMonkey(IMonkeyRepo monkeyRepo) {
_monkeyRepo = monkeyRepo;
}
public void EatBanana(Banana banana) {
//make sure the monkey will eat the banana
if (!this.WillEat(banana)) {
return;
}
//do things here
}
public bool WillEat(Banana banana) { …Run Code Online (Sandbox Code Playgroud) 这是我的mysql查询:
SELECT count(*)
FROM bw_jobs
WHERE year(job_date)=year(curdate()) AND month(job_date)=month(curdate());
Run Code Online (Sandbox Code Playgroud)
如何在hibernate中使用它来获取计数值?
我有一个打印类的私有变量的方法.
public class Test
{
private int number;
public Test(int number)
{
this.number = number;
}
public void PrintValue()
{
Console.WriteLine("Number: " + number);
}
}
Run Code Online (Sandbox Code Playgroud)
如何创建单元测试以确保它在控制台上打印出我期望的值?
我在 Visual Studio 2010 中设置了一个简单的测试项目。对于单元测试,我使用 nunit 2.6.1 并模拟通过 NuGet 安装的 FakeItEasy 1.7.4582.63。
\n\n我尝试使用以下代码伪造 DbDataAdapter:
\n\nusing System.Data.Common;\nusing FakeItEasy;\nusing NUnit.Framework;\n\nnamespace huhu\n{\n [TestFixture]\n public class Class1\n {\n [Test]\n public void test1()\n {\n A.Fake<DbDataAdapter>();\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当我使用 .NET Framework 3.5 运行测试时,一切正常并且 test1 将通过。但是,当我将框架版本设置为 .NET 4.0 时,出现以下异常:
\n\nFakeItEasy.Core.FakeCreationException : \n Failed to create fake of type "System.Data.Common.DbDataAdapter".\n\n Below is a list of reasons for failure per attempted constructor:\n No constructor arguments failed:\n No default constructor was found on the type System.Data.Common.DbDataAdapter.\n …Run Code Online (Sandbox Code Playgroud) 我对单元测试有疑问.我好几天都在考虑它,但找不到答案.
说,我有一个从Web服务下载文件并将其写入磁盘的功能.在没有实际看到文件被下载并写入磁盘的情况下测试它的目的是什么?
虽然我知道我们可以嘲笑网络服务,但我在这种情况下如何做到这一点?据我所知,Mockito之类的东西只是模仿行为而不是提供有意义的数据(本例中的文件).
即使我们可以模拟Web服务的行为,我如何模拟将文件写入磁盘而不真正写入磁盘?
对不起,我没有具体的例子.请随时提出您的意见.
非常感谢
为了模拟存储库,我使用下面的代码。我不明白为什么变量empl总是null.
你知道我错过了什么吗?
谢谢,
[TestMethod]
public void Test()
{
var employee = new Employee { EmployeeID = 1, Code = "Code", FirstName = "MyFirstName", LastName = "MyName" };
var employeeRepository = new Mock<IEmployeeRepository>();
employeeRepository.Setup(x => x.Add(employee)).Verifiable();
var employeeService = new EmployeeService(employeeRepository.Object);
var empl = employeeService.GetById(1);
Assert.IsNotNull(empl);
}
public class Employee
{
public int EmployeeID { get; set; }
public string Code { get; set; }
public string FirstName { get; set; }
public string LastName { get; …Run Code Online (Sandbox Code Playgroud) 给定以下测试类(以及相关的DTO类和接口):
public class Foo
{
private readonly IBar _bar;
public Foo(IBar bar) { _bar = bar; }
public void DoStuff()
{
var dto = new DTO();
dto.Num = 1;
_bar.Test(dto);
dto.Num = 2;
_bar.Test(dto);
}
}
public class DTO { public int Num { get; set; } }
public interface IBar { void Test(DTO dto); }
Run Code Online (Sandbox Code Playgroud)
而这个测试方法(试图验证IBar.Test()被调用两次:一次用Num = 1,一次用Num = 2):
public void TestMethod1()
{
var bar = A.Fake<IBar>();
var foo = new Foo(bar);
foo.DoStuff();
A.CallTo(() => bar.Test(A<DTO>.That.Matches(x => x.Num …Run Code Online (Sandbox Code Playgroud) 我有一个C#类,它自己实例化一个NetworkCommunicator类.我想模拟NetworkCommunicator我的单元测试类,并用一个非常简单的存根替换它.
但NetworkCommunicator它永远不会作为参数传递.它是由被测试的类创建的.
在Ruby中,这很容易被模拟出来.在Java中,这就是你需要依赖注入的原因,这对于这个项目来说太重了.有没有一种简单的方法可以在C#中模拟它,也许使用Moq或类似的东西?
这是我试图将数据网格绑定到的代码:
var query = (from s in entity.Sources
where s.CorporationId == corporationId
select new SourceItem
{
CorporationId = s.CorporationId,
Description=s.Description,
IsActive = s.IsActive,
Name=s.Name,
SourceId=s.SourceId,
TokenId=s.TokenId
});
var x = new ObservableCollection<Source>(query);
Run Code Online (Sandbox Code Playgroud)
这是我的SourceItetm类:
private void SourceDataGrid_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e)
{
var sources = new Source();
sources.CorporationId = _corporationId;
sources.Description = string.Empty;
sources.IsActive = true;
sources.Name = string.Empty;
sources.SourceId = Guid.NewGuid();
sources.TokenId = Guid.NewGuid();
e.NewItem = sources;
}
public class SourceItem
{
private Guid _corporationId1;
private string _description;
private bool _isActive; …Run Code Online (Sandbox Code Playgroud) 我有3类:Course,CourseEntry和Transcript.在成绩单中,我有一个添加课程的功能,如:
public class Transcript {
CourseEntry coursestaken[] = new CourseEntry[6];
public void addCourse(Course course)
{
coursestaken[lastIndexOf(getCoursestaken())] = new CourseEntry(course);
}
(lastIndexOf gives me the empty array index - it's working on)
Run Code Online (Sandbox Code Playgroud)
在我的CourseEntry:
public class CourseEntry {
Course course;
char grade = 'I';
public CourseEntry(Course course)
{
this.course = course;
}
Run Code Online (Sandbox Code Playgroud)
在我的Course:
public class Course {
int courseNumber,credits;
String courseName;
public Course addNewCourse(int courseNumber, int credits, String courseName)
{
this.courseNumber = …Run Code Online (Sandbox Code Playgroud) c# ×10
unit-testing ×9
fakeiteasy ×3
mocking ×3
java ×2
moq ×2
wpf ×2
.net ×1
.net-4.0 ×1
arrays ×1
class ×1
console ×1
hibernate ×1
input ×1
linq ×1
mvvm ×1
mvvm-light ×1
repository ×1
tdd ×1
xml ×1
xmldocument ×1
xunit.net ×1