【发布时间】:2019-07-09 12:21:45
【问题描述】:
C# 新手,正在尝试编写测试程序。 但是,我收到以下错误:
TypeTests.cs(30,41):错误 CS0246:类型或命名空间名称“书” 找不到(您是否缺少 using 指令或程序集 参考?) [C:\dev\gradebook\test\GradeBook.tests\GradeBook.tests.csproj] TypeTests.cs(45,37):错误 CS0246:类型或命名空间名称“书” 找不到(您是否缺少 using 指令或程序集 参考?) [C:\dev\gradebook\test\GradeBook.tests\GradeBook.tests.csproj] TypeTests.cs(86,9):错误 CS0246:类型或命名空间名称“书” 找不到(您是否缺少 using 指令或程序集 参考?) [C:\dev\gradebook\test\GradeBook.tests\GradeBook.tests.csproj]
尝试重建并重新添加 xunit
using System;
using Xunit;
namespace GradeBook.tests
{
public class TypeTests
{
[Fact]
public void Test1()
{
var x = GetInt();
Assert.Equal(3, x);
}
private int GetInt()
{
return 3;
}
[Fact]
public void CSharpCanPassByRef()
{
var book1 = GetBook("Book 1");
GetBookSetName(ref book1, "New Name");
Assert.Equal("Book 1", book1.name);
}
private void GetBookSetName(ref Book book, string name)
{
book = new Book(name);
}
[Fact]
public void CSharpIsPassByValue()
{
var book1 = GetBook("Book 1");
GetBookSetName(book1, "New Name");
Assert.Equal("Book 1", book1.name);
}
private void GetBookSetName(Book book, string name)
{
book = new Book(name);
}
[Fact]
public void CanSetNameFromReference()
{
var book1 = GetBook("Book 1");
SetName(book1, "New Name");
Assert.Equal("New Name", book1.name);
}
private void SetName(BookTests book, string name)
{
book.Name = name;
}
[Fact]
public void GetBookReturnDifferentObject()
{
var book1 = GetBook("Book 1");
var book2 = GetBook("Book 2");
Assert.Equal("Book1", book1.name);
Assert.Equal("Book2", book2.name);
Assert.NotSame(book1, book2);
}
[Fact]
public void TwoVarsCanReferenceSameObject()
{
var book1 = GetBook("Book 1");
var book2 = book1;
Assert.Same(book1, book2);
Assert.True(Object.ReferenceEquals(book1, book2));
}
Book GetBook(string name)
{
return new Book(name);
}
}
}
【问题讨论】:
-
您正在尝试使用名为
Book的类。你在哪里定义它? (尽管值得注意的是,您的错误消息使用 小写 名称book,而不是类名称Book。这是您的错误吗?具体一点很重要。) -
如果类型(类/结构)未定义,您将看到该错误。正如@David 所提到的,.NET 代码通常对类型名称和命名空间使用 pascal 大小写,所以我建议你的命名空间是
GradeBook.Tests(所以你可能希望在创建这个项目时这样做)并使用 @ 987654326@ 当你定义它。奇怪的是,当您的示例代码仅使用new Book时,错误正在寻找小写的book... -
要定义您缺少的
Book类,您可以在命名空间声明中的同一文件或另一个文件中执行此操作。如果在另一个文件中,如果它在同一个命名空间中,您的 Test 类将自动能够看到它,否则您需要添加一个using来引用另一个命名空间。欢迎使用 C#! -
嗨大卫,书在程序中定义:使用系统;使用 System.Collections.Generic; namespace GradeBook { class Program { static void Main(string[] args) { var book = new Book("Joe's Gradebook"); book.AddGrade(89.1); book.AddGrade(90.5); book.AddGrade(77.5); book.GetStatistics(); }}} 我在测试和主程序之间设置了一个引用。
-
那不是
Book的定义,那是Book类型对象的实例化。类Book定义在哪个命名空间中?您需要在引用它的其他文件中添加using NameSpaceOfBook;指令。